最近公司测试需要对DubboRPC接口进行测试,测试工具使用的是Jmeter,按照常规的做法需要包装一个Java请求,再配合JmeterJava Sample去做测试,这种做法是最简单最普遍的,但是这个方法不够灵活和方便,那我们能不能写一个Jmeter Plugin来解决这个问题?让Dubbo RPC接口测试更为方便一些?

那我们先了解一下Jmeter的插件机制

Jmeter Plugin

先来看一下Jmeter的核心组件

  1. Sample 取样器,这个是最主要的组件,测试的内容主要是靠Sample来实现,我们常见的Sample有,HttpSampleFTPSampleJavaSampleSMTPSampleLDAPSample等。
  2. Timer 定时器,主要用于配置sample之间的等待时间,可以查看:org.apache.jmeter.timers.RandomTimer
  3. ConfigElement 配置组件,主要用于定义前置配置。如数据库连接,csv输入数据集等。主要功能是将配置转换为变量设置到JMeter context中。
  4. Assertion 验证Sampler的结果是否符合预期
  5. PostProcessor 一般用于对Sampler结果进行二次加工
  6. Visualizer 将sampler的结果进行可视化展示。
  7. Controller 对sampler进行逻辑控制。
  8. SampleListener 负责处理监听,基于事件机制。一般用于保存sampler的结果等耗费时间的操作。

Jmeter的插件机制比较简单,Jmeter提供了扩展类来支持自定义插件的开发。
继承org.apache.jmeter.samplers.gui.AbstractSamplerGuiorg.apache.jmeter.samplers.AbstractSampler就可以完成一个插件开发。

JMeter的GUI机制

由于Jmeter是一个基于Swing的GUI工具,所以开发插件需要对Java Swing GUI框架有一定了解。 JMeter内部有两种GUI的实现方式。

第一种方式:

直接继承JMeterGUIComponent接口的抽象实现类:

org.apache.jmeter.config.gui.AbstractConfigGui
org.apache.jmeter.assertions.gui.AbstractAssertionGui
org.apache.jmeter.control.gui.AbstractControllerGui
org.apache.jmeter.timers.gui.AbstractTimerGui
org.apache.jmeter.visualizers.gui.AbstractVisualizer
org.apache.jmeter.samplers.gui.AbstractSamplerGui

通过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下

github: jmeter-plugin-dubbo

码云: jmeter-plugin-dubbo

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
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

插件使用

启动Jmeter添加DubboSample如下图:

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

根据上图提示传入值即可。

接口以及接口依赖包请添加到classpath下,可以放在apache-jmeter-3.0\lib\ext下,也可以通过下图方式添加:

运行结果

注意事项

  1. 当使用zk,address填入zk地址(集群地址使用”,”分隔),使用dubbo直连,address填写直连地址和服务端口
  2. timeout:服务方法调用超时时间(毫秒)
  3. version:服务版本,与服务提供者的版本一致
  4. retries:远程服务调用重试次数,不包括第一次调用,不需要重试请设为0
  5. cluster:集群方式,可选:failover/failfast/failsafe/failback/forking
  6. 接口需要填写类型完全名称,含包名
  7. 参数支持任何类型,包装类直接使用java.lang下的包装类,小类型使用:int、float、shot、double、long、byte、boolean、char,自定义类使用类完全名称。
  8. 参数值,基础包装类和基础小类型直接使用值,例如:int为1,boolean为true等,自定义类与List或者Map等使用json格式数据。
  9. 更多dubbo参数查看官方文档:http://dubbo.io/books/dubbo-user-book/references/xml/dubbo-reference.html

到这里插件的就介绍完了。世界和平、keep real!