测试开发工具开发 -JMeter 函数二次开发

|------------------------------------------------------------------------------------------------------------------------|
| #### 在JMeter中开发自定义函数是一个常见的需求,允许我们扩展JMeter的功能以适应特定的测试需求。自定义函数可以用来处理数据,生成输出,或者执行特定的运算。通过JMeter函数二次开发可以帮我们解决实际测试过程中造数难的问题 |

用过JMeter的同学对JMeter内置的函数助手不陌生,使用函数助手可以帮我们非常高效生成一些数据满足我们的接口测试的要求。比如我们想要生成随机的手机号码,可以使用RandomString函数,具体做法:设置手机号码前缀区段(比如189、138、177)这些,然后再使用RandomString函数帮我们生成后8位的随机数,然后拼接成手机号码:

但是有时候测试需求中的手机号码区段并不是固定的,如果想要手机号码区段也能够满足随机的要求(并且符合运营商开放的区段),又或者是生成合法的随机身份证号码,这类需求该如何实现呢?JMeter的内置函数满足不了,此时我们可以对JMeter函数进行二次开发。

JMeter二次开发实现逻辑

自定义函数必须继承于JMeter的AbstractFunction类

并需要重写该类的4个方法:

  • execute,函数执行逻辑,必需,自定义函数的核心逻辑,并返回经过处理后的内容

  • getReferenceKey,函数名称,必需,返回一个字符串,表示在JMeter中使用自定义函数的函数名,一般以双下划线开头,如__IDNumber

  • setParameters,设置函数接收参数值,如果自定义函数有参数,用于接收调用时传递过来的参数,注意使用时,字符串参数不要加双引号

  • getArgumentDesc,函数参数描述,如果自定义函数有参数,用于返回函数参数说明

JMeter二次开发具体步骤

1、创建Java Maven项目

选择从maven-archetype-quickstart模板创建

在pom.xml中添加依赖ApacheJMeter_java、ApacheJMeter_core,注意与使用的JMeter版本保持一致

<!--引入JMeter依赖--><dependency>    <groupId>org.apache.jmeter</groupId>    <artifactId>ApacheJMeter_java</artifactId>    <version>5.4.3</version></dependency><dependency>    <groupId>org.apache.jmeter</groupId>    <artifactId>ApacheJMeter_core</artifactId>    <version>5.4.3</version></dependency>
2、自定义函数类继承AbstractFunction

创建functions子包,在已有包中,添加一个名为functions子包

添加自定义函数, 在functions子包下,添加自定义函数类,并继承AbstractFunction类,并实现该类的4个抽象方法:

  • 在execute方法中添加插件逻辑

  • 在getReferenceKey方法中返回自定义名称函数

  • 如果函数有参数,在setParameters方法获取传递过来的参数

  • 如果函数有参数,在getArgumentDesc中描述接收的参数

    public class IDNumber extends AbstractFunction { //参数 private String area;
    /** * 函数执行逻辑,自定义函数的核心逻辑,并返回经过处理后的内容 * * @param sampleResult * @param sampler * @return * @throws InvalidVariableException / public String execute(SampleResult sampleResult, Sampler sampler) { //调用身份证生成逻辑,使用了第三方的业务逻辑 String idNumber = IdNumberGenerateUtil.generate(area); return idNumber; }
    /
    * * 设置函数接收参数值,接收JMeter界面用户传递过来的参数 * * @param parameters * @throws InvalidVariableException / public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException { //检查参数个数 checkParameterCount(parameters, 0, 1); //获取参数 Object[] params = parameters.toArray(); //获取区域 if (params.length > 0) { CompoundVariable cvArea = (CompoundVariable) params[0]; this.area = cvArea.execute(); } }
    /
    * * 函数名称,JMeter界面函数的名称 * * @return / public String getReferenceKey() { return "__IDNumber"; }
    /
    * * 函数参数描述,JMeter界面显示的参数说明 * * @return */ public List<String> getArgumentDesc() { List<String> desc = new ArrayList<String>(); desc.add("城市名"); return desc; }}

3、将代码打包成jar文件

方式一:项目没有第三方依赖,直接使用右侧Maven菜单的Lifecyle->package打包,直接使用jar包

方式二:项目有第三方依赖,需要按照如下步骤操作:

  • 在pom.xml文件的build->plugins配置节下添加如下内容

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.5.5</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins></build>

  • 使用右侧Maven菜单的Plugins->assembly->assemble:assembly打包,会生成一个带-jar-with-dependencies后缀的jar包,直接使用此xxxx--jar-with-dependencies.jar包

4、将jar文件部署到JMeter中

将上一步的xxx.jar文件拷贝到JMeter安装目录的lib/ext目录中

重启JMeter,打开函数助手即可使用自定义的函数:

相关推荐
茶馆大橘1 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
土小帽软件测试7 小时前
jmeter基础01-2_环境准备-Mac系统安装jdk
java·测试工具·jmeter·macos·软件测试学习
土小帽软件测试12 小时前
jmeter基础03_汉化jmeter界面
测试工具·jmeter·软件测试学习
紫晓宁13 小时前
jmeter结合ansible分布式压测--3压测执行
分布式·jmeter·ansible
黑色叉腰丶大魔王15 小时前
《通过 Jmeter 压测存储过程详解》
jmeter
hai405871 天前
基于python主观题自动阅卷系统毕业设计项目
spring boot·python·jmeter·django·make与makefile
程序员小雷1 天前
应对自动化测试中的异步操作:策略与实践
功能测试·selenium·测试工具·jmeter·单元测试·测试用例·postman
奔波儿灞爱霸波尔奔1 天前
JMeter与大模型融合应用之jmeter.properties配置文件新增配置
jmeter
叮当喵是mao2 天前
接口测试(十)jmeter——关联(正则表达式提取器)
jmeter·正则表达式
开水好喝2 天前
JMeter快速造数之数据导入导出
jmeter