最近公司测试需要对Dubbo
的RPC
接口进行测试,测试工具使用的是Jmeter
,按照常规的做法需要包装一个Java
请求,再配合Jmeter
的Java Sample
去做测试,这种做法是最简单最普遍的,但是这个方法不够灵活和方便,那我们能不能写一个Jmeter Plugin
来解决这个问题?让Dubbo RPC
接口测试更为方便一些?
那我们先了解一下Jmeter的插件机制
Jmeter Plugin
先来看一下Jmeter
的核心组件
Sample
取样器,这个是最主要的组件,测试的内容主要是靠Sample来实现,我们常见的Sample有,HttpSample
、FTPSample
、JavaSample
、SMTPSample
、LDAPSample
等。Timer
定时器,主要用于配置sample之间的等待时间,可以查看:org.apache.jmeter.timers.RandomTimer
ConfigElement
配置组件,主要用于定义前置配置。如数据库连接,csv输入数据集等。主要功能是将配置转换为变量设置到JMeter context中。Assertion
验证Sampler的结果是否符合预期PostProcessor
一般用于对Sampler结果进行二次加工Visualizer
将sampler的结果进行可视化展示。Controller
对sampler进行逻辑控制。SampleListener
负责处理监听,基于事件机制。一般用于保存sampler的结果等耗费时间的操作。
Jmeter的插件机制比较简单,Jmeter提供了扩展类来支持自定义插件的开发。
继承org.apache.jmeter.samplers.gui.AbstractSamplerGui
和org.apache.jmeter.samplers.AbstractSampler
就可以完成一个插件开发。
JMeter的GUI机制
由于Jmeter
是一个基于Swing
的GUI工具,所以开发插件需要对Java Swing GUI
框架有一定了解。 JMeter
内部有两种GUI的实现方式。
第一种方式:
直接继承JMeterGUIComponent接口的抽象实现类:
org.apache.jmeter.config.gui.AbstractConfigGui |
通过Swing的Bean绑定机制
前者的好处是自由度高,可定制性强,但需要开发者关心GUI控件布局,以及从控件到Model的转换。后者基本不需要开发者接触到GUI层的东西,定义好Bean
以及BeanInfo
即可。但SampleListener
不支持BeanInfo
方式定义。
ps.如果java swing比较熟悉的话推荐使用第一种方式,自由度高。
下面是我写的插件DubboSample,主要用于Dubbo RPC接口测试。
Dubbo Plugin for Apache JMeter
jmeter-plugin-dubbo项目已经transfer到dubbo group下
DubboSample使用
支持Jmeter版本
Jmeter版本:3.0
插件安装
插件包可以去github
上下载。将插件包放入Jmeter的lib的ext下。
${Path}\apache-jmeter-3.0\lib\ext |
如果使用的是:jmeter-plugins-dubbo-1.0.0-SNAPSHOT-jar-with-dependencies.jar
包含所有依赖。
如果使用的是:jmeter-plugins-dubbo-1.0.0-SNAPSHOT.jar
需要自定添加插件的依赖包,推荐使用上面的包,依赖包版本如下:
dubbo-2.5.3.jar |
插件使用
启动Jmeter
添加DubboSample
如下图:
添加后能看到DubboSample
的具体操作页面,如下图:
根据上图提示传入值即可。
接口以及接口依赖包请添加到classpath
下,可以放在apache-jmeter-3.0\lib\ext
下,也可以通过下图方式添加:
运行结果
注意事项
- 当使用zk,address填入zk地址(集群地址使用”,”分隔),使用dubbo直连,address填写直连地址和服务端口
timeout
:服务方法调用超时时间(毫秒)version
:服务版本,与服务提供者的版本一致retries
:远程服务调用重试次数,不包括第一次调用,不需要重试请设为0cluster
:集群方式,可选:failover/failfast/failsafe/failback/forking- 接口需要填写类型完全名称,含包名
- 参数支持任何类型,包装类直接使用
java.lang
下的包装类,小类型使用:int、float、shot、double、long、byte、boolean、char
,自定义类使用类完全名称。 - 参数值,基础包装类和基础小类型直接使用值,例如:int为1,boolean为true等,自定义类与
List
或者Map
等使用json格式数据。 - 更多dubbo参数查看官方文档:http://dubbo.io/books/dubbo-user-book/references/xml/dubbo-reference.html
到这里插件的就介绍完了。世界和平、keep real!