对于如何使用Jmeter测试http接口,大家都已经比较熟悉,网上相关的知识也很多。但随着微服务越来越流行,仅仅会测试http接口已经远远不够。Dubbo作为当下非常流行的RPC接口,学习如何测试Dubbo接口已经成为了测试人员进阶的必备知识之一。
对于Dubbo接口的测试,可以通过编写代码的方式、使用工具的方式,今天我们先讲如何通过jmeter Dubbo插件来测试Dubbo接口。
一、插件下载
插件下载地址:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/releases
下载jmeter-plugins-dubbo-2.7.8-jar-with-dependencies.jar版本,此包中已含必要的依赖,推荐使用with-dependencies.jar包,下载后放到JMeter安装目录中的lib/ext路径下。
使用的Jmeter的版本:5.4.3
插一句:如何修改Jmeter背景色为白色,我是真的用不习惯黑色的那个背景:
二、环境接口
开发环境ZK地址:zookeeper://devzk1.xx.com:2181?backup=devzk2.xx.com:2181,devzk3.xx.com:2181
dubbo直连服务器, 服务器:xx.xx.xx.xx:20880 , 20880是dubbo的服务端口
dubbo接口:com.xxxx.test.sdk.api.DubboServiceTestYY方法名:yyTestDubbo入参类型:自定义的POJO对象:com.xxxx.test.sdk.para.Param参数值:{“name”:“test”,“age”:1,“address”:“中国”}
三、Dubbo Sample 直连Dubbo配置
取样器选择Dubbo Sampler,直连的方式配置:
1、 Registry Center(注册设置) 区域填写内容:由于是用直连的方式,所以Protocol选none。Address填写直连服务器的信息:xx.xx.xx.xx:20880
2、Consumer&Service Settings(消费者和服务者设置):Timeout:设置请求接口超时时间,默认1000ms, 就用默认的就行,如果实际接口响应比较慢,也可以改大点,比如改成5000
Version:版本,一般无需填写。Dubbo不同版本之间差异较大,不同版本之间不能互相调用。注意:默认这里填的是1.0,现在dubbo的版本都是2.xx了,因此直接删掉版本号,就让这里为空,不然用默认的1.0会调不通。最开始我没有管这个值,结果发现调不通,删了version的值就成功调通了。
后面其他的几项指标都不管,保持默认就行。
3、Get Provider List按钮:根据Address填写的地址,获取服务提供者的服务列表。直连的方式下,点这个按钮没用,会提示让你把Protocol选为zookeepr or nacos or redis, 但是直连的时候Protocol要选none, 所以直连的时候就手动在下面去填interface和method,不用 Get Provider List按钮来获取。
4、 Interface 填 dubbo的接口:com.xxxx.test.sdk.api.DubboServiceTestYYMethod填方法名:yyTestDubbo
5、 Args:接口入参,输入对应的参数类型和参数值paramType:参数支持任何类型,可以直接使用java.lang下的包装类,如:int、float、shot、double、long、byte、boolean、char、String等。类型也可以是自定义对象POJO,需使用类的完全名称。我们这里接口是要用自定义对象: com.xxxx.test.sdk.para.Param。 paramValue:填写需要的参数值,例如:int为1,boolean为true等,自定义类与List或者Map等使用Json格式数据。我们这里接口是要用Json格式数据:{“name”:“test”,“age”:1,“address”:“中国”} 注意:有个小坑,paramValue填完值之后,如果马上填运行按钮调接口,会发现paramValue值消失了,没保存上。所以要再点一下增加按钮添加一行空白行,再删掉这行空白行,这样就保存上了。
执行接口调用,调用成功:
四、Dubbo Sample ZK方式配置
1、 Registry Center(注册设置) 区域填写内容:由于是用ZK的方式,所以Protocol选zookeeper。Address填写直连服务器的信息:zookeeper://devzk1.xx.com:2181?backup=devzk2.xx.com:2181,devzk3.xx.com:2181
其他项填写,和直连的方式一样。
注意:实际测试中发现即使是用的ZK的方式,Get Provider List按钮也获取不到服务提供者的服务列表,点击之后会先出现提示信息:
意思是:获取所有提供者的服务列表,可能会导致 JMeter 停止响应几秒钟。你要继续吗?点击是,理论上正常的话会停顿一会儿,然后弹窗提示获取提供者列表成功!
如果10秒中都没有出现如上弹框,证明列表获取失败,可能是zookeeper地址填写错误,也可能是服务有问题了。而此时JMeter界面是卡死状态,需要强制关闭掉JMeter,因为等再长时间也没有意义了。
而实际测试的时候,发现我的ZK是对的,服务器也是正常运行的,也没有出现弹窗,Jmeter也会卡死。因此建议还是直接在下面手动输入Interface和Method吧。
执行接口调用,调用成功:
,