一、什么是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

慧测腾讯课堂 课程地址:


