测试工具

Jmeter扩展自定义函数

2019-03-05  本文已影响0人  明燕南飞

总体思路

扩展Jmeter自定义函数 执行以下步骤:

新建项目

Eclipse中新建一个Maven项目
File > New > Project,选择Maven Project
导入扩展Jmeter function的2个依赖包,如图所示

function1.png
function2.png

编写JMeter function代码

要实现扩展JMeter function,主要有两点:

需要继承AbstractFunction,并且实现相应的方法。

AbstractFunction类提供了4个抽象方法,在扩展时需全部实现

    public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
         checkParameterCount(parameters, MIN_PARA_COUNT, MAX_PARA_COUNT); //检查参数的个数是否正确
         values = parameters.toArray(); //将值存入类变量中
public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
        try {
            int max = new Integer(((CompoundVariable) values[0]).execute().trim());
            int val = r.nextInt(max);
            return String.valueOf(val);
        } catch(Exception ex) {
            throw new InvalidVariableException(ex);
        }
    }
    public String getReferenceKey() {
        return KEY;
    }
    public List<String> getArgumentDesc() {
        return desc;
    }

测试function正确性

右击项目,弹出菜单export->jar file,如下图打包成一个jar包

function4.png

把这个JAR拷贝至$JMETER__HOME/lib/ext目录下,重新启动Jmeter.
打开选项中的函数助手对话框,如果配置正确的话就能出现自己定义的function.

完整的源码


packagejmeter.test.functions;

importjava.util.Collection;

importjava.util.LinkedList;

importjava.util.List;

importjava.util.Random;

importorg.apache.jmeter.engine.util.CompoundVariable;

importorg.apache.jmeter.functions.AbstractFunction;

importorg.apache.jmeter.functions.InvalidVariableException;

importorg.apache.jmeter.samplers.SampleResult;

importorg.apache.jmeter.samplers.Sampler;

publicclassMyRandomFuncextendsAbstractFunction{

// 自定义function的描述

privatestaticfinalList desc =newLinkedList();

static{

desc.add("Get a random int within specified parameter value.");

}

// function名称

privatestaticfinalString KEY ="__MyRandomFunc";

privatestaticfinalintMAX_PARA_COUNT =1;

privatestaticfinalintMIN_PARA_COUNT =1;

// 传入参数的值

privateObject[] values;

privateRandom r =newRandom();

@Override

publicListgetArgumentDesc(){

returndesc;

}

@Override

publicStringexecute(SampleResult previousResult, Sampler currentSampler)throwsInvalidVariableException{

try{

intmax =newInteger(((CompoundVariable) values[0]).execute().trim());

intval = r.nextInt(max);

returnString.valueOf(val);

}catch(Exception ex) {

thrownewInvalidVariableException(ex);

}

}

@Override

publicStringgetReferenceKey(){

returnKEY;

}

@Override

publicvoidsetParameters(Collection<CompoundVariable> parameters)throwsInvalidVariableException{

checkParameterCount(parameters, MIN_PARA_COUNT, MAX_PARA_COUNT);// 检查参数的个数是否正确

values = parameters.toArray();// 将值存入类变量中。

}

}

转载于http://blog.51cto.com/14010723/2300565

上一篇下一篇

猜你喜欢

热点阅读