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

相关推荐
测试199821 小时前
Jmeter HTTP代理服务器录制压力脚本
自动化测试·软件测试·测试工具·jmeter·程序人生·职场和发展·测试用例
web135085886351 天前
全面指南:使用JMeter进行性能压测与性能优化(中间件压测、数据库压测、分布式集群压测、调优)
jmeter·中间件·性能优化
互联网杂货铺2 天前
软件测试之压力测试
自动化测试·软件测试·测试工具·jmeter·职场和发展·测试用例·压力测试
幸福的达哥2 天前
后端性能测试优化案例
jmeter·压力测试·安全性测试
逻各斯2 天前
用JMeter给要登录的操作做压力测试
jmeter·压力测试
测试杂货铺2 天前
接口测试及常用接口测试工具(Postman/Jmeter)
自动化测试·软件测试·测试工具·jmeter·测试用例·接口测试·postman
陈志化2 天前
JMeter----笔记
笔记·jmeter
测试小罡3 天前
如何在JMeter中配置断言,将非200状态码视为测试成功
jmeter
锦都不二3 天前
一文2000字从0到1用Jmeter全流程性能测试实战
jmeter
Allen Bright3 天前
【JMeter使用-2】JMeter中Java Request采样器的使用指南
java·开发语言·jmeter