一,什么是jmeter函数
jmeter函数
二,准备工作
需要一些java基础及java开发环境(推荐IDEA)
三,实施阶段
以jemeter自带的Random函数为例:
1.编写待导入的函数
package org.apache.jmeter.functions;//包名必须以functions结尾
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
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 Random extends AbstractFunction {//创建自己的函数类,继承AbstractFunction类
private static final List<String> desc = new LinkedList<>();
private static final String KEY = "__Random"; //函数名
static {
desc.add(JMeterUtils.getResString("minimum_param")); //参数1说明
desc.add(JMeterUtils.getResString("maximum_param")); //参数2说明
desc.add(JMeterUtils.getResString("function_name_paropt")); //参数3说明
}
private CompoundVariable varName; //参数
private CompoundVariable minimum;//参数
private CompoundVariable maximum;//参数
/**
* No-arg constructor.
*/
public Random() {
}
/** {@inheritDoc} */
@Override
public String execute(SampleResult previousResult, Sampler currentSampler)
throws InvalidVariableException {//函数实现
long min = Long.parseLong(minimum.execute().trim());
long max = Long.parseLong(maximum.execute().trim());
long rand = ThreadLocalRandom.current().nextLong(min, max+1);
String randString = Long.toString(rand);
if (varName != null) {
JMeterVariables vars = getVariables();
final String varTrim = varName.execute().trim();
if (vars != null && varTrim.length() > 0){// vars will be null on TestPlan
vars.put(varTrim, randString);
}
}
return randString;
}
/** {@inheritDoc} */
@Override
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {//函数参数处理
checkParameterCount(parameters, 2, 3);
Object[] values = parameters.toArray();
minimum = (CompoundVariable) values[0];
maximum = (CompoundVariable) values[1];
if (values.length>2){
varName = (CompoundVariable) values[2];
} else {
varName = null;
}
}
/** {@inheritDoc} */
@Override
public String getReferenceKey() {
return KEY;//设置函数名
}
/** {@inheritDoc} */
@Override
public List<String> getArgumentDesc() {
return desc;//设置参数描述
}
}
基本可以看出只需要编写execute这个方法,其他都是套路。
网友评论