一、背景

对于如何使用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背景色为白色,我是真的用不习惯黑色的那个背景:

dubbo一个接口多个服务分组_dubbo一个接口多个服务分组

三、环境接口

开发环境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,直连的方式配置:

dubbo一个接口多个服务分组_dubbo一个接口多个服务分组_02

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.DubboServiceTestYY
Method填方法名: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一个接口多个服务分组_zookeeper_03

 

dubbo一个接口多个服务分组_dubbo一个接口多个服务分组_04

五、Dubbo Sample ZK方式配置

dubbo一个接口多个服务分组_List_05

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按钮也获取不到服务提供者的服务列表,点击之后会先出现提示信息:

dubbo一个接口多个服务分组_zookeeper_06

意思是:获取所有提供者的服务列表,可能会导致 JMeter 停止响应几秒钟。 你要继续吗?
点击是,理论上正常的话会停顿一会儿,然后弹窗提示获取提供者列表成功!

dubbo一个接口多个服务分组_服务器_07

如果10秒中都没有出现如上弹框,证明列表获取失败,可能是zookeeper地址填写错误,也可以能是服务有问题了。
而此时JMeter界面是卡死状态,需要强制关闭掉JMeter,因为等再长时间也没有意义了。

而实际测试的时候,发现我的ZK是对的,服务器也是正常运行的,也没有出现弹窗,Jmeter也会卡死。因此建议还是直接在下面手动输入Interface和Method吧。

执行接口调用,调用成功:

dubbo一个接口多个服务分组_List_08

dubbo一个接口多个服务分组_服务器_09

dubbo一个接口多个服务分组_服务器_10