测试开发工具开发 -JMeter 函数二次开发

用过JMeter的同学对JMeter内置的函数助手不陌生,使用函数助手可以帮我们非常高效生成一些数据满足我们的接口测试的要求。比如我们想要生成随机的手机号码,可以使用RandomString函数,具体做法:设置手机号码前缀区段(比如189、138、177)这些,然后再使用RandomString函数帮我们生成后8位的随机数,然后拼接成手机号码:

image20240427094642606.png

但是有时候测试需求中的手机号码区段并不是固定的,如果想要手机号码区段也能够满足随机的要求(并且符合运营商开放的区段),又或者是生成合法的随机身份证号码,这类需求该如何实现呢?JMeter的内置函数满足不了,此时我们可以对JMeter函数进行二次开发。

JMeter二次开发实现逻辑

自定义函数必须继承于JMeter的AbstractFunction类

并需要重写该类的4个方法:

JMeter二次开发具体步骤

1、创建Java Maven项目

选择从maven-archetype-quickstart模板创建

在pom.xml中添加依赖ApacheJMeter_java、ApacheJMeter_core,注意与使用的JMeter版本保持一致

<!--引入JMeter依赖-->
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_java</artifactId>
    <version>5.4.3</version>
</dependency>
<dependency>
    <groupId>org.apache.jmeter</groupId>
    <artifactId>ApacheJMeter_core</artifactId>
    <version>5.4.3</version>
</dependency>

2、自定义函数类继承AbstractFunction

创建functions子包,在已有包中,添加一个名为functions子包

添加自定义函数, 在functions子包下,添加自定义函数类,并继承AbstractFunction类,并实现该类的4个抽象方法:

public class IDNumber extends AbstractFunction {
    //参数
    private String area;

    /**
     * 函数执行逻辑,自定义函数的核心逻辑,并返回经过处理后的内容
     *
     * @param sampleResult
     * @param sampler
     * @return
     * @throws InvalidVariableException
     */
    public String execute(SampleResult sampleResult, Sampler sampler) {
        //调用身份证生成逻辑,使用了第三方的业务逻辑
        String idNumber = IdNumberGenerateUtil.generate(area);
        return idNumber;
    }

    /**
     * 设置函数接收参数值,接收JMeter界面用户传递过来的参数
     *
     * @param parameters
     * @throws InvalidVariableException
     */
    public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
        //检查参数个数
        checkParameterCount(parameters, 0, 1);
        //获取参数
        Object[] params = parameters.toArray();
        //获取区域
        if (params.length > 0) {
            CompoundVariable cvArea = (CompoundVariable) params[0];
            this.area = cvArea.execute();
        }
    }

    /**
     * 函数名称,JMeter界面函数的名称
     *
     * @return
     */
    public String getReferenceKey() {
        return "__IDNumber";
    }

    /**
     * 函数参数描述,JMeter界面显示的参数说明
     *
     * @return
     */
    public List<String> getArgumentDesc() {
        List<String> desc = new ArrayList<String>();
        desc.add("城市名");
        return desc;
    }
}

3、将代码打包成jar文件

方式一:项目没有第三方依赖,直接使用右侧Maven菜单的Lifecyle->package打包,直接使用jar包

image20240427101157939.png

方式二:项目有第三方依赖,需要按照如下步骤操作:

image20240427101422688.png

4、将jar文件部署到JMeter中

将上一步的xxx.jar文件拷贝到JMeter安装目录的lib/ext目录中

image20240427101550176.png

重启JMeter,打开函数助手即可使用自定义的函数:

image20240427101656240.png

回帖
请输入回帖内容 ...