关于Jmeter插件的二次开发,其实之前有提到过,当我们需要用Jmeter来发送Java请求,就需要我们自己写程序实现功能,然后放入Jmeter中进行测试。
详情可以看之前的文章:Jmeter发送Java请求_社会小刚哥的博客-CSDN博客
本篇主要讲解如何开发一个函数助手的插件,使用工具Eclipse,所需jar包ApacheJmeter_core.jar,ApacheJmeter_java.jar。
根据项目所需生成随机的车牌号,我们首先看一下Java代码怎么实现:
代码贴出来,方便大家练手:
public class CarId {
public static void main(String[] args) {
char[] license = new char[5];
int i = 0;
int k = 0;
int n = 0;
for (; i < 5; i++) {
if (Math.random() > 0.5) {
if (k < 3) {
license[i] = (char) ('A' + Math.random() * 26);
k++;
} else {
license[i] = (char) ('0' + Math.random() * 10);
n++;
}
} else {
if (n < 4) {
license[i] = (char) ('0' + Math.random() * 10);
n++;
} else {
license[i] = (char) ('A' + Math.random() * 26);
k++;
}
}
}
String licenses = String.valueOf(license);
String pro = "京";
String city = "A";
String carId = pro+city+licenses;
System.out.println(carId);
}
}
主要方法的实现有了,来看看怎么做插件,新建的包名称必须是org.apache.jmeter.functions,在包下新建class名为CarId。
建好的class需要去继承AbstractFunction类,并重写其中的方法。
首先确定在函数助手中的展示名称,以及所需的函数参数,具体实现如下:
真正的实现代码在Execute方法,代码的逻辑不变。
如果存储结果的变量名定义了,还需要把最终结果放入:
所有代码贴上,仅供参考:
package org.apache.jmeter.functions;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;
import org.apache.jmeter.threads.JMeterVariables;
import org.apache.jmeter.util.JMeterUtils;
public class CarId extends AbstractFunction {
private static final List<String> desc = new LinkedList<>();
private static final String KEY = "__CarId"; //在函数助手中的显示名称
static {
desc.add(JMeterUtils.getResString("Province_param")); //函数参数-省份简称
desc.add(JMeterUtils.getResString("Cityid_param")); //函数参数-市级ID
desc.add(JMeterUtils.getResString("function_name_paropt"));
}
private CompoundVariable Province_param;
private CompoundVariable Cityid_param;
private CompoundVariable varName;
public CarId() {
}
@Override
public List<String> getArgumentDesc() {
// TODO Auto-generated method stub
return desc;
}
@Override
public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
String province = Province_param.execute().trim();//获取所输入参数-省级简称
String city = Cityid_param.execute().trim(); //获取所输入参数-市级ID
//实现逻辑不变
char[] license = new char[5];
int i = 0;
int k = 0;
int n = 0;
for (; i < 5; i++) {
if (Math.random() > 0.5) {
if (k < 3) {
license[i] = (char) ('A' + Math.random() * 26);
k++;
} else {
license[i] = (char) ('0' + Math.random() * 10);
n++;
}
} else {
if (n < 4) {
license[i] = (char) ('0' + Math.random() * 10);
n++;
} else {
license[i] = (char) ('A' + Math.random() * 26);
k++;
}
}
}
String licenses = String.valueOf(license);
String carId = province+city+licenses;
if (varName != null) {
JMeterVariables vars = getVariables();
final String varTrim = varName.execute().trim();
if (vars != null && varTrim.length() > 0) {
vars.put(varTrim, carId);
}
}
return carId;
}
@Override
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
// TODO Auto-generated method stub
checkParameterCount(parameters, 2, 3);
Object[] values = parameters.toArray();
Province_param = (CompoundVariable) values[0];
Cityid_param = (CompoundVariable) values[1];
if (values.length > 2) {
varName = (CompoundVariable) values[2];
} else {
varName = null;
}
}
@Override
public String getReferenceKey() {
// TODO Auto-generated method stub
return KEY;
}
}
代码完成了,就是打成jar包,放到jmeter/lib/ext目录下,然后启动jmeter就可以在函数助手中找到了,添加一个调试取样器,并发看一下效果:
简单来说我们知道了所做功能的核心代码逻辑,只需要在Eclipse导入所需Jmeter包,继承AbstractFunction类,重写其中的方法,完成后打成jar包放在jmeter/lib/ext目录就可以了。
相互学习,共同进步!