0


JMeter自定义函数

JMeter二次开发需求一般集中在2个方向:

  • 针对请求类,即需要和服务器进行通信的,我们一般是做java请求的二次开发

  • 针对数据处理类型,是不需要和服务器进行通信,是在客户端完成的,一般是做JMeter的自定义函数

除了用自定义函数,还可以通过beanshell去进行处理。但是一般不建议,因为beanshell脚本语言属于解释型语言,即每一次运行都需要临时编译一次,即编译一次运行一次,整体性能较差。 并且在JMeter中,beanshell的调试是非常糟糕的,提示信息较少;Beanshell的解析执行顺序,会导致无法读取其他函数的值。

怎么做自定义函数

JMeter提供了一个abstractFunction的类用于用户去继承、实现自定义函数。

准备工作

准备自定义函数开发过程所需要的依赖jar包。通常分为两种:

  • JMeter框架lib\ext目录下的ApacheJMeter_core.jar和ApacheJMeter_functions.jar

  • 业务相关,指数据处理本身的逻辑和JMeter是没有任何关系的情况。

  • 业务本身的jar包

  • 业务依赖的jar包

实操

  1. 创建一个Java project后,选中工程右键Build Path ->Configure Build Path...->Libraries

  2. 通过Add External JARs添加ApacheJMeter_core.jar

  3. 创建一个Java Package,命名为XX.XX.functions

  4. 在Package中创建一个继承AbstractFunction的Java Class

  1. 需要复写4个方法

  2. getArgumentDesc() //用来定义函数的参数列表,是给用户看的

  3. execute() //函数的主题部分,即函数的结果由该方法返回

  4. getReferenceKey() //用来定义函数的名称

在JMeter中,约定俗成要求函数的名称必须是以"__"开头,因此通常该方法返回以下定义的字符串:

private final static String key = "__hello";

  1. setParameters() //用来接收和处理用户调用函数时所传入的参数值

  2. 导出jar包。 选中类文件,右键Export导出为Java JAR file

  3. 将jar包复制到lib\ext目录后,重新启动JMeter

传值

private final static String key = "__hello";

private static List<String> params = new LinkedList<String>();
static
{
    params.add("请输入用户名");
    params.add("请输入性别:男or女");
}

public String username = "";
public String sex = "";

@Override
public List<String> getArgumentDesc(){
    return params;
}

@Override
public String execute(SampleResult arg0, Sampler arg1) throws InvalidVariableException{
    String result = "";
    if(sex.equals("男")){
        result = username + ",先生你好。";
    }
    else if(sex.equals("女")){
        result = username + ",女士你好。";
    }
    else{
        result = "无名氏你好,请问你是男是女?";
    }    
    return result;
}

@Override
public String getReferenceKey(){
    return key;
}

@Override
public void setParameters(Collection<CompoundVariable> arg0) throws InvalidVariableException{
    checkParameterCount(arg0, 2);
    Object[] data = arg0.toArray();
    username = ((CompoundVariable)data[0]).execute();
    set = ((CompoundVariable)data[1]).execute();
}

业务包

自定义function依赖的业务包放在JMeter的lib目录下


本文转载自: https://blog.csdn.net/u010378984/article/details/128538018
版权归原作者 开水好喝 所有, 如有侵权,请联系我们删除。

“JMeter自定义函数”的评论:

还没有评论