Jmeter扩展开发--自定义java取样器

简介

jmeter内置了包括:http、https、tcp等各种协议的支持,通常情况只需要做简单的参数配置即可使用。但在某些特殊情况下,还是希望能做自定义压测处理,此时就涉及Jmeter的扩展开发自定义Java取样器,如下图所示:

依赖

XML 复制代码
<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的扩展,如果自定义操作需要用到其他的依赖,引入即可

打包插件

XML 复制代码
<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显示出来,代码试图如下:

java 复制代码
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连接建立,数据准备等等,代码示例如下:

java 复制代码
public void setupTest(JavaSamplerContext context) {
        // doSameInit();
    }

org.apache.jmeter.protocol.java.sampler.JavaSamplerClient#teardownTest方法说明

teardownTest方法用于线程在停止运行runTest方法后调用一次,用于关闭jmeter资源操作,包括:连接关闭,数据清理等等,代码示例如下:

java 复制代码
public void teardownTest(JavaSamplerContext context) {
        // do same clean operation
    }

org.apache.jmeter.protocol.java.sampler.JavaSamplerClient#runTest方法说明

核心方法,jmeter中每个线程会创建一个JavaSamplerClient,执行一次setUp方法,然后循环执行runTest方法,直到设定条件结束(循环多少次或者执行时间结束),代码示例及说明如下:

java 复制代码
 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,该自定义组件即可被识别

相关推荐
测试老哥12 小时前
Jmeter如何进行多服务器远程测试?
自动化测试·软件测试·功能测试·测试工具·jmeter·测试用例·性能测试
测试界清流2 天前
JMeter函数整理
jmeter
not coder3 天前
验证负载均衡与弹性伸缩
运维·jmeter·kubernetes·负载均衡
我自飞扬临天下5 天前
JMeter接口自动化脚本框架
运维·jmeter·自动化
奔波儿灞爱霸波尔奔5 天前
浅谈JMeter之常见问题Address already in use: connect
jmeter
茶本无香5 天前
HTTP协议接口三种测试方法之-JMeter(保姆教程)
网络协议·jmeter·http
TD11015 天前
jmeter:登录接口的token用于下一个接口
jmeter
.似水5 天前
JMeter 性能测试
jmeter
not coder9 天前
JMeter 是什么
jmeter
南夏一木子9 天前
Jmeter——JDBC连接数据库相关
数据库·jmeter