Jmeter测试dubbo接口
Jmeter dubbo sample
URL:https://github.com/thubbo/jmeter-plugins-for-apache-dubbo/wiki/%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97
支持Jmeter版本
3.0+
支持Dubbo版本
2.5.x, 2.6.x
插件安装
插件包可以去github上下载。插件安装目录:${JMETER_HOME}\lib\ext.
如果使用的是:jmeter-plugins-dubbo-${version}-jar-with-dependencies.jar包含必要的依赖,推荐使用这个包。
如果使用的是:jmeter-plugins-dubbo-${version}.jar需要自行添加插件的依赖包,依赖包版本如下:
dubbo-2.5.3.jar
javassist-3.15.0-GA.jar
zookeeper-3.4.6.jar
zkclient-0.1.jar
jline-0.9.94.jar
netty-3.7.0-Final.jar
slf4j-api-1.7.5.jar
log4j-over-slf4j-1.7.5.jar
接口包依赖添加方式
1.3.x版本
不需要添加接口包依赖
1.2.x版本
接口包及接口包依赖的其他jar包请添加到${JMETER_HOME}\lib\ext,也可以通过下图方式添加

插件使用
启动Jmeter添加DubboSample如下图:

添加后能看到DubboSample的具体操作页面,如下图:

根据上图提示传入值即可。
运行结果

注册中心
-
Protocol=none为直连方式
-
Protocol=zookeeper使用zk注册中心
-
Protocol=multicast为广播方式
-
Protocol=redis使用redis注册中心
-
Protocol=simple使用simple注册中心
注意事项
-
当使用zk,address填入zk地址(集群地址使用","分隔),使用dubbo直连,address填写直连地址和服务端口
-
timeout:服务方法调用超时时间(毫秒)
-
version:服务版本,与服务提供者的版本一致
-
retries:远程服务调用重试次数,不包括第一次调用,不需要重试请设为0
-
cluster:集群方式,可选:failover/failfast/failsafe/failback/forking
-
group: 服务分组,当一个接口有多个实现,可以用分组区分,必需和服务提供方一致
-
接口需要填写类型完全名称,含包名
-
参数支持任何类型,包装类直接使用java.lang下的包装类,小类型使用:int、float、shot、double、long、byte、boolean、char,自定义类使用类完全名称。
-
参数值,基础包装类和基础小类型直接使用值,例如:int为1,boolean为true等,自定义类与List或者Map等使用json格式数据。
参数对照
|
Java类型
|
paramType
|
paramValue
|
|
int
|
int
|
1
|
|
int[]
|
int[]
|
[1, 2]
|
|
double
|
double
|
1.2
|
|
double[]
|
double[]
|
[1.2, 1.3]
|
|
short
|
short
|
1
|
|
short[]
|
short[]
|
[1, 2]
|
|
float
|
float
|
1.2
|
|
float[]
|
float[]
|
[1.2, 1.3]
|
|
long
|
long
|
1
|
|
long[]
|
long[]
|
[1, 2]
|
|
byte
|
byte
|
字节
|
|
byte[]
|
byte[]
|
字节
|
|
boolean
|
boolean
|
true
false
|
|
boolean[]
|
boolean[]
|
[true, false]
|
|
char
|
char
|
A,如果字符过长取值为:"STR".charAt(0)
|
|
char[]
|
char[]
|
[A, B]
|
|
java.lang.String
|
java.lang.String
String
string
|
"foo"
foo
|
|
java.lang.String[]
|
java.lang.String[]
String[]
string[]
|
["foo1", "foo2"]
|
|
java.lang.Integer
|
java.lang.Integer
Integer
integer
|
1
|
|
java.lang.Integer[]
|
java.lang.Integer[]
Integer[]
integer[]
|
[1, 2]
|
|
java.lang.Double
|
java.lang.Double
Double
|
1.2
|
|
java.lang.Double[]
|
java.lang.Double[]
Double[]
|
[1.2, 1.3]
|
|
java.lang.Short
|
java.lang.Short
Short
|
1
|
|
java.lang.Short[]
|
java.lang.Short[]
Short[]
|
[1, 2]
|
|
java.lang.Long
|
java.lang.Long
Long
|
1
|
|
java.lang.Long[]
|
java.lang.Long[]
Long[]
|
[1, 2]
|
|
java.lang.Float
|
java.lang.Float
Float
|
1.2
|
|
java.lang.Float[]
|
java.lang.Float[]
Float[]
|
[1.2, 1.3]
|
|
java.lang.Byte
|
java.lang.Byte
Byte
|
字节
|
|
java.lang.Byte[]
|
java.lang.Byte[]
Byte[]
|
字节
|
|
java.lang.Boolean
|
java.lang.Boolean
Boolean
|
true
false
|
|
java.lang.Boolean[]
|
java.lang.Boolean[]
Boolean[]
|
[true, false]
|
|
JavaBean
|
com.your.package.BeanName
|
{"att1":"foo","att2":"foo2"}
|
|
JavaBean[]
|
com.your.package.BeanName
|
[{"att1":"foo"}, {"att1":"foo2"}]
|
|
java.util.Map以及子类
|
java.util.Map以及子类
|
{"att1":"foo","att2":"foo2"}
|
|
java.util.Map<String,JavaBean>
|
java.util.Map
|
{"keyName":{"att1":"foo"}}
|
|
java.util.HashMap<Object,Object>
|
java.util.HashMap
|
{"keyName":{"att1":"foo"}}
|
|
java.util.Collection以及子类
|
java.util.Collection以及子类
|
["a","b"]
|
|
java.util.List<String>
|
java.util.List
|
["a", "b"]
|
|
java.util.List<JavaBean>
|
java.util.List
|
[{"att1":"foo1"}, {"att1":"foo2"}]
|
|
java.util.List<Map<Object, JavaBean>>
|
java.util.List
|
[{"keyName1":{"att1":"foo1"}}, {"keyName2":{"att1":"foo1"}}]
|
|
java.util.List<Long>
|
java.util.List
|
[1, 2, 3]
|
|
java.util.ArrayList<Object>
|
java.util.ArrayList
|
["foo" , 1, true]
|
ps. paramValue可使用jmeter函数,例如:{"att1":"foo-${__RandomString(5,12345,ids)}"}

浙公网安备 33010602011771号