简介
jmeter内置了包括:http、https、tcp等各种协议的支持,通常情况只需要做简单的参数配置即可使用。但在某些特殊情况下,还是希望能做自定义压测处理,此时就涉及Jmeter的扩展开发自定义Java取样器,如下图所示:
依赖
<dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_core</artifactId><version>${jmeter-version}</version>
</dependency><dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_java</artifactId><version>${jmeter-version}</version>
</dependency>
添加如上的基本依赖,完成对Jmeter的扩展,如果自定义操作需要用到其他的依赖,引入即可
打包插件
<build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>assemble-all</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>
java取样器代码编写
自定义java取样器使用如下图所示:
实现org.apache.jmeter.protocol.java.sampler.JavaSamplerClient
或者
继承抽象类org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient
其中有4个重要的方法,一一说明如下
org.apache.jmeter.protocol.java.sampler.JavaSamplerClient#getDefaultParameters方法说明
getDefaultParameters方法是运行jmeter实例的默认参数方法,只有在该方法中配置了参数名称的参数才会在以上ui显示出来,代码试图如下:
public Arguments getDefaultParameters() {Arguments arguments = new Arguments();arguments.addArgument("userName","张三");arguments.addArgument("address","汽车站");return arguments;}
org.apache.jmeter.protocol.java.sampler.JavaSamplerClient#setupTest方法说明
在jmeter中每个线程即是一个JavaSamplerClient实例(后续在做自定义取样器时会做源码分析),每个JavaSamplerClient实例均会且只会运行一次setupTest方法一次。在该方法中一般编写测试场景中的初始化操作,包括:tcp连接建立,数据准备等等,代码示例如下:
public void setupTest(JavaSamplerContext context) {// doSameInit();}
org.apache.jmeter.protocol.java.sampler.JavaSamplerClient#teardownTest方法说明
teardownTest方法用于线程在停止运行runTest方法后调用一次,用于关闭jmeter资源操作,包括:连接关闭,数据清理等等,代码示例如下:
public void teardownTest(JavaSamplerContext context) {// do same clean operation}
org.apache.jmeter.protocol.java.sampler.JavaSamplerClient#runTest方法说明
核心方法,jmeter中每个线程会创建一个JavaSamplerClient,执行一次setUp方法,然后循环执行runTest方法,直到设定条件结束(循环多少次或者执行时间结束),代码示例及说明如下:
public SampleResult runTest(JavaSamplerContext context) {SampleResult result = new SampleResult();result.sampleStart();try {// do business operationresult.sampleEnd();result.setSuccessful(true);result.setResponseCode("200");result.setSamplerData("");} catch (Exception e) {result.setSuccessful(false);result.setResponseCode("500");}return result;}
以上编写完测试代码之后,打包,将相关依赖包放到Jmeter安装目录/lib/ext下,重启jmeter,该自定义组件即可被识别