大数跨境

dubbo接口界面化调试工具(一)

dubbo接口界面化调试工具(一) 慧测
2019-02-26
1
导读:第一课:dubbo接口界面化调试工具(一)

一、什么是Dubbo接口

Dubbo 接口是阿里巴巴开源的致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,dubbo框架告别了传统的web service的服务模式,进而改用provider和consumer模式进行服务。为什么是高性能的呢?可以在某个服务器集群中提供单一专注的服务,这样不与其他服务混杂,同时dubbo接口有SOA调度通过监控每台服务器而实现负载均衡。consumer端无需关注provider端如何实现,只需在注册中心订阅即可到相应服务器请求服务,这样就实现了高性能和透明化。说到底,Dubbo接口就是一个分布式服务框架。



现在dubbo接口增多,做dubbo接口测试也越来越多,也是有必要,除了做dubbo接口测试外,很多时候我们在做业务测试中数据准备方面可以很好利用dubbo接口帮助我们准备数据。

这里我们介绍简单且又好操作的telnet命令来测试dubbo接口,并且实现可视化界面操作



二、基本命令操作

1、连接服务

telnetlocalhost20880:输入命令点击enter直接进入dubbo

2、查看

通过 ls  命令查看服务器中接口

通过 ls  命令查看服务器中接口

ls -l XxxService 显示服务的方法详细信息列表。

3、调用服务接口

调用接口时,以JSON格式传入参数(这点很方便),然后打印返回值和所用时间


Invoke

invokeXxxService.xxxMethod({"prop": "value"})

调用服务的方法。

invokexxxMethod({"prop": "value"})

调用服务的方法(自动查找包含此方法的服务)

参考资料:

http://alibaba.github.io/dubbo-doc-static/Telnet+Command+Reference

-zh- showComments=true&showCommentArea=true.htm


三、代码实现命令操作

上面是最常用telnet远程调用dubbo接口,通过上面的步骤其实我们基本可以实现dubbo接口测试了,但是非界面话的东西让我们做起来的确是不方便,如果我们通过代码方式实现teinet来远程调用,再来提供个接口用前端界面来调用该接口,那么将会大大方便我们dubbo接口测试。


TeInetServicelmpl.java核心实现类,从main函数中调用方式就很容易看出,我们只要通过contriller层写一个入口,来接收前端传来的dubbo接口数据,比如:连接信息、接口名、接口参数等,来定义一个connectDTD对象,最终来调用这个实现类,即可通过代码实现dubbo接口调用。


package dubbo.service.impl
@Service    
public class TelnetServiceImpl implementsTelnetService {   


    
privatestatic final Logger log =LoggerFactory.getLogger(TelnetServiceImpl.class);                 
    
@Override     
    
public ResultDTO<String>send(ConnectDTO dto) {                 
        
//分开ip和端口 
        
PointModelmodel = ParamUtil.parsePointModel(dto.getConn());  
        
TelnetClienttelnetClient = null; 
        try
{  
           telnetClient =
new TelnetClient("VT220");  // 指明Telnet终端类型,否则会返回来的数据中文会乱码
           
telnetClient.setDefaultTimeout(dto.getTimeout() <= 0 ? 50000 :dto.getTimeout()); // socket延迟时间:5000ms
           
telnetClient.connect(model.getIp(), model.getPort());  // 建立一个连接,默认端口是23
           
InputStream in = telnetClient.getInputStream(); // 读取命令的流
           
PrintStream out = new PrintStream(telnetClient.getOutputStream());  // 写命令的流
           
//发送命令 invoke
           
String command = makeCommand(dto.getServiceName(), dto.getMethodName(), dto.getJson());
           
log.info("send:{}", command);
           
out.println("\r\n");
           
out.println(command);
           
out.println("\r\n");
           
out.flush();
           
// handle inputStream
           
StringBuilder sb = new StringBuilder();
           
BufferedInputStream bi = new BufferedInputStream(in);
           while
(true) {
               
byte[] buffer = new byte[1024];
               int
len = bi.read(buffer);
               if
(len <= -1) {
                   
break;
               
}

               String msg =
new String(buffer, 0, len, "UTF-8");
               
sb.append(msg);
               if
(msg.endsWith("dubbo>")) {
                   
break;
               
}
           }
           out.println(
"exit"); // 写命令
           
out.flush(); // 将命令发送到telnet Server
           
telnetClient.disconnect();
           
String ret = sb.toString();
           
String lineSeparator = System.getProperty("line.separator", "\n");
           if
(StringUtils.isNotEmpty(ret)) {
               ret = ret.split(lineSeparator)[
0];
           
}
           
log.info("receive:{}", ret);
           
// format the json string
           
String result = JSON.toJSONString(JSON.parse(ret), SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat);
           
System.out.println(result);
           return
ResultDTO.createSuccessResult("Success", result, String.class);
        
} catch (Exceptione) {
           
log.error("occuran error when sending message with telnet client.", e);
           return
ResultDTO.createExceptionResult(e, String.class);
        
} finally {
           
try {
               
if (null !=telnetClient) {
                   telnetClient.disconnect()
;
               
}
           }
catch (Exception e) {
               e.printStackTrace()
;
           
}
        }
    }
    
private String makeCommand(StringserviceName, String methodName, Stringjson) {

        
return StringUtil.format("invoke{}.{}({})", serviceName,

methodName, json == null ?"":json);
    
}
    
public staticvoid main(String[] args) {
        ConnectDTOdto =
new ConnectDTO();
        
dto.setConn("192.168.1.1:18080");
        
dto.setServiceName("com.test");
        
dto.setJson("\"123456\"");
        
dto.setMethodName("getTest");
TelnetServiceImpl test = new TelnetServiceImpl();
        
test.send(dto);
    
}
}


四、接口界面化

当我们实现一个dubbo调用的接口时,其实再界面化已经不难了,只要界面中传入接口要的信息,来调用接口即可

前端界面还是我们熟知的vue来实现

前端

vue+vuex+axios+vue-router+element

 

极简模式

完全都过测试人员手动输入接口各种相关信息,来调用dubbo接口


普通模式

为了更高效测试,我们一切可通过自动调用接口下拉选择方式来操作

1、我通过公司接口特点,当我选择提供者地址时,自动会查询该地址下的所有接口,我的接口名就可以通过下拉框直接选择了

2、当我选择了接口名后,就会自动调用该接口下的方法,然后我就可以选择方法了

3、最终测试人员只需要输入参数即可,调用dubbo接口

测试根本就不需要手动输入参数名、方法名之类的,大大提高了测试效率




- END -


3月23日,自动化测试16期火爆开讲!

抓住机遇快快行动吧!



免费学习,转发集赞

第一波奖励:

千元现金

慧测内部教材——接口自动化测试最佳实践



欢迎加入我们:

慧测官网:www.huicewang.com

慧测Python群:324015481

公开课服务群:623636110

咨询QQ:2657535456

咨询微信号:huice666


慧测腾讯课堂 课程地址



【声明】内容源于网络
0
0
慧测
专注人工智能前沿技术落地企业实战应用
内容 404
粉丝 0
慧测 专注人工智能前沿技术落地企业实战应用
总阅读104
粉丝0
内容404