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

相关推荐
月明长歌1 天前
从零构建高并发测试体系:JMeter 接口压测与全链路实战指南
jmeter
一碗面4213 天前
Jmeter的基本使用
jmeter
余防3 天前
jmeter使用
jmeter
maqiang_7203 天前
jmeter做压力测试如何找到软件瓶颈
jmeter·压力测试
少云清4 天前
【软件测试】1_性能测试实战 _商城项目介绍
jmeter·性能测试
少云清4 天前
【软件测试】8_性能测试实战 _执行测试脚本
jmeter·性能测试·测试脚本执行
卓码软件测评4 天前
【第三方高校课题软件确认测试:LoadRunner与JMeter-企业级性能测试工具选型深度对比】
测试工具·jmeter·性能优化·单元测试·测试用例
AC赳赳老秦5 天前
R语言数据分析:DeepSeek辅助生成统计建模代码与可视化图表
开发语言·人工智能·jmeter·数据挖掘·数据分析·r语言·deepseek
老友@5 天前
JMeter 在 Linux 环境下进行生产级性能压测的完整实战指南
java·linux·jmeter·性能优化·系统架构·压测·性能瓶颈