简介
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 operation
result.sampleEnd();
result.setSuccessful(true);
result.setResponseCode("200");
result.setSamplerData("");
} catch (Exception e) {
result.setSuccessful(false);
result.setResponseCode("500");
}
return result;
}
以上编写完测试代码之后,打包,将相关依赖包放到Jmeter安装目录/lib/ext下,重启jmeter,该自定义组件即可被识别