插件开发方法有两种:
一、在jmeter官网下载jmeter源码,在源码里面新加函数,然后导出jar;
二、不下载源码,直接导入jmeter相应的jar包,即可开发。(推荐)
下面介绍第二种开发方法:
在eclipse新建项目,导入jmeter目录下libext目录中的的ApacheJMeter_core.jar,继承AbstractFunction类。
案例:以下写一个计算阶乘的Function,将其命名为Factorial,主要代码参考如下,
import java.util.Collection; import java.util.LinkedList; import java.util.List; 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 org.apache.jmeter.util.JMeterUtils; import org.apache.jorphan.logging.LoggingManager; import org.apache.log.Logger; public class Factorial extends AbstractFunction { private static final Logger log = LoggingManager.getLoggerForClass(); private static final List<String> desc = new LinkedList<String>(); private static final String KEY = "__factorial"; private Object[] values = null; static { desc.add("factorial_value"); } //描述参数 @Override public List<String> getArgumentDesc() { // TODO Auto-generated method stub return desc; } //函数执行,返回结果 @Override public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException { // TODO Auto-generated method stub String numberString = ((CompoundVariable) values[0]).execute().trim(); int num; try{ num = Integer.valueOf(numberString); } catch (Exception e){ return null; } return String.valueOf(factorial(num)); } //获取函数引用关键字 @Override public String getReferenceKey() { // TODO Auto-generated method stub return KEY; } //设置参数 @Override public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException { // TODO Auto-generated method stub //可以检查参数数量,主要包括以下两种方法 checkMinParameterCount(parameters, 1); checkParameterCount(parameters, 1, 1); values = parameters.toArray(); } private int factorial(int num){ int result = 1; if(num < 0){ return -1; } if(num == 0){ result = 1; } else { for(int i = num; i > 0; i--){ result *= i; } } return result; } }
通过继承AbstractFunction抽象类,重写getArgumentDesc方法实现对函数参数的描述,重写setParameters方法来对函数的参数进行检查和设置,重写getReferenceKey方法告诉JMeter该函数在框架中的引用名称,重写execute方法,实现对该函数的执行并返回结果。通过上述代码我们完成了对Factorial函数组件的编写。
将代码导出为jar文件,放在libext目录中,打开jmeter即可在函数助手中查看到该函数组件: