步骤1、导入libext下ApacheJMeter_core.jar和ApacheJMeter_functions.jar
步骤2、新建function的类的package声明必须已".functions"结尾,如com.mytest.fuctions
步骤3、继承AbstractFunction类,并实现相应的方法
package com.mytest.functions; 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; public class MyFunction extends AbstractFunction{ // 传入参数的值 private Object[] values; // 自定义function的描述 private static final List<String> desc = new LinkedList<String>(); static { desc.add("Get a random int within specified parameter value."); } // function名称 private static final String KEY = "__MyRandomFunc"; @Override public List<String> getArgumentDesc() { // TODO Auto-generated method stub return desc; } /* * JMeter会将上次运行的SampleResult和当前的Sampler作为参数传入到该方法里,返回值就是在运行该function后得到的值,以String类型返回。 * 该方法如果操作了非线程安全的对象(比如文件),则需要将对该方法进行线程同步保护 */ @Override public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException { // TODO Auto-generated method stub return null; } /* 这个就是function的名字。JMeter的命名规则是在方法名前面加入双下划线"__"。比如"__MyRandomFunc", function的名字跟实现该类的类名应该一致,而且该名字应该以static final的方式在实现类中定义好,避免在运行的时候更改它 */ @Override public String getReferenceKey() { // TODO Auto-generated method stub return KEY; } /* * 这个方法在用于传递用户在执行过程当中传入的实际参数值。该方法在function没有参数情况下也会被调用。 * 一般该方法传入的参数会被保存在类内全局变量里,并被后面调用的execute方法中使用到 */ @Override public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException { values = parameters.toArray(); // 将值存入类变量中 } }