测试dubbo接口常见的方法是用Java代码实现dubbo接口调用,这种方式参数化不太方便,对于代码能力不强的测试工程师也存在门槛。调研后,可以使用JMeter,加载jmeter-plugins-dubbo插件,实现dubbo接口调用。
- Java 8
- JMeter 5.1.1 r1855137
- jmeter-plugins-dubbo-2.7.1-jar-with-dependencies.jar
- alibaba dubbo 2.8.0(dubbox)
一、插件安装
插件下载,插件安装目录,${JMETER_HOME}libext。
推荐使用jmeter-plugins-dubbo-${version}-jar-with-dependencies.jar,包含必要的依赖,安装完成启动JMeter可以看到。
![46302e59c87ff80390ed4f608517384d.png](https://img-blog.csdnimg.cn/img_convert/46302e59c87ff80390ed4f608517384d.png)
二、JMeter接口测试准备
A、interface定义
public
B、dubbo-xml定义
支持HTTP和dubbo两种调用方式。
<dubbo:service
C、配置
zookeeper.url=10.3.253.38:2181
dubbo.port=8533
rest.port=8089
D、maven打包,生成接口jar包
![b31559eac34216abc442218c6e06a6ca.png](https://img-blog.csdnimg.cn/img_convert/b31559eac34216abc442218c6e06a6ca.png)
E、HTTP调用,传入订单id,返回订单标识
证明接口正常运行。
![69a3966c1c899240c7a339a475707784.png](https://img-blog.csdnimg.cn/img_convert/69a3966c1c899240c7a339a475707784.png)
三、JMeter接口测试
A、添加jar包依赖
接口包及接口包依赖的其他jar包添加到${JMETER_HOME}libext,也可以添加到TestPlan里。
![e3813ea706993cc04650ef117b55e387.png](https://img-blog.csdnimg.cn/img_convert/e3813ea706993cc04650ef117b55e387.png)
B、引入jar包之后,新建线程组,新建dubbo sample
![37ed0e6e0be48401af4390b5a714d9f7.png](https://img-blog.csdnimg.cn/img_convert/37ed0e6e0be48401af4390b5a714d9f7.png)
C、添加结果断言和查看结果树
![56a3a184a5f6c0fd5ef068e4908d31ae.png](https://img-blog.csdnimg.cn/img_convert/56a3a184a5f6c0fd5ef068e4908d31ae.png)
![1bef5fbe819a4dfbfe515dc3dc6cae9f.png](https://img-blog.csdnimg.cn/img_convert/1bef5fbe819a4dfbfe515dc3dc6cae9f.png)
D、查看消费情况
![dc3d37012df0e8c99567f09639be7cd3.png](https://img-blog.csdnimg.cn/img_convert/dc3d37012df0e8c99567f09639be7cd3.png)
E、持续集成
上传脚本至服务器,通过CI可以进行集成。
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
这还只是验证,后续会有更多的二次开发,未来可期。
四、调试JMeter插件
因为需要将jmeter-plugins-dubbo的核心功能抠出来,摒弃掉JMeter那些awt、swing的GUI代码,需要调试JMeter插件,可以使用远程debug的方式进行,以前也对此方式进行过总结,参看:i.9ish:「Java」 - IntelliJ IDEA & Remote Debug。
A、编译插件jar包
将https://github.com/dubbo/jmeter-plugins-for-apache-dubbo,clone至本地,maven编译打包,使用本地jar替换至JMeter目录。
B、修改JMeter启动脚本
增加:-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=10240
%JM_START% "%JM_LAUNCH%" %ARGS% %JVM_ARGS% -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=10240 -jar "%JMETER_BIN%ApacheJMeter.jar" %JMETER_CMD_LINE_ARGS%
C、重启JMeter,加载JMX工程
可以看到端口开放提示。
![5e2f9d11a9a34db474c949fc0b4d7c76.png](https://img-blog.csdnimg.cn/img_convert/5e2f9d11a9a34db474c949fc0b4d7c76.png)
D、使用IntelliJ IDEA的Remote Debug连接插件,进行debug
执行线程组,触发插件执行,遇到断点,程序暂停。
![31c2c3d10a1869bd303961531da41c88.png](https://img-blog.csdnimg.cn/img_convert/31c2c3d10a1869bd303961531da41c88.png)
五、dubbo方法调用,dubbo方法列表单元测试
已经能够成功调用到JMeter实例中的dubbo接口,以及返回zk上注册的dubbo名称。
![f7a876e7007e9dc40fc1634acb29a1a6.png](https://img-blog.csdnimg.cn/img_convert/f7a876e7007e9dc40fc1634acb29a1a6.png)
![c1d1c5988aaea8def79c21396893244c.png](https://img-blog.csdnimg.cn/img_convert/c1d1c5988aaea8def79c21396893244c.png)
参考:
https://github.com/dubbo/jmeter-plugins-for-apache-dubbo/wiki/用户指南