目录
2. 新建 package:stressTest.functions
3. 新建一个类继承 AbstractFunction,重写以下方法:
一、 前言
在JMeter中进行HTTP接口测试时,编写自定义函数可以帮助我们更灵活地处理测试数据和参数化请求。自定义函数可以根据特定的需求生成动态的测试数据,从而增加测试的覆盖范围和准确性。
比如最近一个项目,在发送 http 请求的时候,客户端需要发 Token,它是根据给项目分配的 ID 和 Key 值以及系统当前时间生成的,服务端会验证该 Token 的有效性。
开发自定义函数,网上一般有两种做法:
- 修改 jmeter 源码,增加一个函数,重新导出 jmeter 的 jar 包,放入 jmeter 的 lib 目录。
- 新建一个项目,导入 jmeter 原生 jar 包,继承虚基类,编写新函数,打包,放入 jmeter 的 lib 目录。
第一种方法既复杂,又不易于维护管理,我个人喜欢用第二种方法。
第二种方法的大坑就是 package 命名有特殊的要求:package 路径中必须包含 functions 一级。
二、 编写自定义函数的步骤
1. 新建一个工程,导入 jmeter jar 包。
我用 maven 管理项目,因此只需要在 pom 文件中加入以下引用。
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>3.0</version>
</dependency>
2. 新建 package:stressTest.functions
注意:路径中必须包含 functions,否则 jmeter 无法识别。JMeter 设计让一些核心的类(非 UI 相关的,比如 ApacheJMeter_core 等)可以在非 UI 的方式下运行的时候能被加载进来,这些类会被优先加载。加载这些类的时候是通过命名规则来实现的。所有实现 function 的类必需包含".functions."。
当然也可以通过更改 jmeter.properties 中的配置来实现改变命名规则,如下所示。但是一般来说不推荐更改此项配置。
classfinder.functions.contain=.functions.
3. 新建一个类继承 AbstractFunction,重写以下方法:
- execute
- setParame