Jmeter自定义函数开发
二次开发背景:
在Jmeter的函数助手里,有很多内置的函数,比如Random、UUID、time等等。使用这些函数可以快速帮我们生成某些数据,进行一些逻辑处理。用起来非常的方便。但是在实际接口测试过程中,有很多的需求,Jmeter内置的函数可能并不能满足我们的需求。这个时候我们可以通过自己编写代码,扩展Jmeter的内置函数。
接下来,主要讲解如何用Java语言,配合idea 二次开发Jmeter 函数
简单将步骤过程: 创建maven项目 —> pom依赖配置—>注意实现规则—>代码实现—>打jar包—>放到jmeter目录(lib/ext)—>玩耍
1.首先,使用idea,新建maven工程,如下图,创建出一个maven工程
2.配置pom.xml依赖,配置以后,会有报错,不要着急(复制注意版本,下方截图有说明)
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.1.1</version>
</dependency>
</dependencies>
3.配置项目的maven版本以及指定setting文件,和本地maven仓库
3.1 点击 file–Settings–输入框搜索maven,如下图看到这个页面,最后点击ok
3.2 配置好了以后,下载maven依赖
4.创建package,实现扩展jmeterfunction,主要有两点:
4.1.实现function的类的package声明必须包含".functions"
4.2.需要继承org.apache.jmeter.functions.AbstractFunction,并且实现相应的方法
4.3 代码说明(代码都有写注释每个步骤和属性以及方法,可以进行参考,按实际自己的需要进行改动):
属性:
自定义函数的参数名称列表,List类型
自定义函数的名称,String类型
保存用户输入数据的数组,CompoundVariable[]类型
方法:
execute:执行函数的逻辑
getArgumentDesc:返回自定义函数所有的参数名描述
setParameters:获取用户输入的参数
getReferenceKey:返回自定义函数的名称
package com.randomstr.jmeter.functions;
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.functions.AbstractFunction;
import org.apache.jmeter.functions.InvalidVariableException;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
public class RandomStrFunction extends AbstractFunction {
// 函数助手展示出来的参数说明
private static final List<String> param = new LinkedList<>();
// 在函数助手中展示出来的名字,你定义的是什么,最终就从函数助手中找这个名字
private static final String KEY = "__randomStr";
// 定义数组接收jmeter函数助手输入的参数
private CompoundVariable[] values;
static {
param.add("输入指定字母");
}
/**
* 自定义函数逻辑处理
* @param sampleResult
* @param sampler
* @return
* @throws InvalidVariableException
*/
@Override
public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {
// 接收参数中的作为字符串前缀,使用random进行拼接字符串后,进行返回
String startWith = values[0].execute().trim();
Random rand = new Random();
int ranInt = rand.nextInt(1000000);
return startWith + ranInt;
}
/**
* 获取用户输入的参数值,并保存到CompoundVariable[] 中
* @param collection
* @throws InvalidVariableException
*/
@Override
public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
// 检查用户输入的参数是否正确, 从入参判断 长度最长1 最小也是1 也就是只能是一个参数,如果多参数这里要改一下
checkParameterCount(collection, 1, 1);
this.values = collection.toArray(new CompoundVariable[collection.size()]);
}
/**
* 给Jmeter返回自定义函数的名称
* @return
*/
@Override
public String getReferenceKey() {
return KEY;
}
/**
* 返回自定义函数的参数名称描述
* @return
*/
@Override
public List<String> getArgumentDesc() {
return param;
}
}
5.我们编写了代码后,需要把代码打成jar包,然后放到jmeter的 lib/ext目录下,最后重启jmeter,去函数助手中就可以找到了
5.1 使用maven,打jar包,如下
5.2 粘贴jar到指定目录 lib/ext, 如下
5.3 jmeter操作,好了完成,愉快的玩耍吧