JMeter私人定制之函数定制

Apache JMeter是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,主要用于性能测试。但在实际应用过程中,依靠JMeter自带函数已经无法满足当前业务需求,因此我们需要去构建和引用JMeter本身未提供的函数,比如生成车牌数据。虽然该场景可以通过BeanShell取样器编写代码实现,但是这种方式代码复用率较低,故为了提高脚本复用率,减少维护工作量,此类场景我们可以通过二次开发函数助手来实现。

下文将以JMeter5.1.1版本为例,手把手教大家如何通过创建Maven项目来私人定制一个属于自己的JMeter函数插件。

1.创建Maven项目

步骤1 创建Maven工程(Maven工程项目创建这里不在赘述),创建后得到如下项目结构:
在这里插入图片描述
步骤2 在pom.xml文件中将JMeter相关的依赖包进行引入

<!--引入JMeter的依赖jar包;version与本地Jmeter版本一致-->
<dependencies>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_core</artifactId>
        <version>5.1.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_java</artifactId>
        <version>5.1.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

在这里插入图片描述
这里一定要引入JMeter相关的依赖包,只有引入相关的依赖包并且代码继承相关的类和重新实现类中相应的方法,我们才能在JMeter界面上的函数助手中看到我们私人订制的函数。

2.创建package及Java class文件

步骤1 创建我们的package路径,路径一般为com.dahuatech.functions。
在这里插入图片描述
package名字必须以functions结尾,因为在jmeter.properties中定义了Jmeter查找class的规则,如下:

classfinder.functions.contain=.functions

步骤2 创建我们的package路径下的Java Class文件,文件名称一般要求简明之意,从文件名称就可以看出当前你私人定制的函数的作用,具体的package路径和Java Class文件样例如下图。
在这里插入图片描述

3.私人定制函数功能实现

步骤1 定制函数依赖相应的JMeter类引用

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;

步骤2 新建Java类并继承以获取父类的能力

public class JmeterFunctionDemo extends AbstractFunction

步骤3 定义私人订制函数在JMeter函数助手中的展示名称

//固定写法;自定义函数名称,也就是函数助手下显示的函数名称
private static final String KEY = "__JmeterFunctionDemo";

如上述函数名称为“__JmeterFunctionDemo”,则在JMeter界面中展示的函数名称如下图标明①部分。
在这里插入图片描述

步骤4 定义私人订制函数在JMeter函数助手中的需要输入个数和参数的名称。如代码所示,该函数需要输入两个参数,参数实际展示情况如上图标明②所示。

//固定写法;自定义输入参数列表及参数说明
private static List<String> desc = new LinkedList<String>();
static {
     desc.add("请输入姓名");
     desc.add("请输入性别(男/女)");
}

步骤5 定义全局变量来接受入参,如上述界面中展示,需要输入姓名和性别,userName和sex就是分别用来接受函数助手界面中输入的值。

//定义全局变量,用来接收界面输入的值,并供其他方法使用
private String userName;
private String sex;

步骤6 重写execute方法,execute主要用于函数的具体逻辑实现和相应的数据结果返回,返回的类型为String类型。样例中实现的逻辑就是针对输入参数对性别进行判断,判断以后输出姓名+欢迎语。

//执行函数时调用,用于执行具体的逻辑(1.可以直接编写业务逻辑;2.单独维护业务逻辑代码,并在此处引用)
@Override
public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
        String result = null;
        if (sex.equals("男")){
            result = userName + "欢迎帅哥来到浙江!";
        }
        if (sex.equals("女")){
            result = userName + "欢迎美女来到浙江!";
        }
        return result;
 }

步骤7 重写setParameters方法,该方法主要是接受和处理函数助手中输入的参数

//执行函数时调用,接收与处理用户调用函数时传递的参数值
@Override
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
 //检测用户再调用函数时,所传参数最少为2个(checkParameterCount)
    checkMinParameterCount(parameters,2);
    //将用户输入的参数值保存到数组values数组中
    Object[] values = parameters.toArray();
    //全局变量赋值(只能为String,若为其他类型,需要自行转换)
    userName = ((CompoundVariable) values[0]).execute();
    sex = ((CompoundVariable) values[1]).execute();
    }

步骤8 重写getReferenceKey方法,该方法主要是在函数助手中显示函数的名称

//返回function名称(函数助手对话框-选择对应函数时调用)
@Override
public String getReferenceKey() {
     return KEY;
}

步骤9 重写getArgumentDesc,该方法主要是解释入参的参数含义

//函数助手界面显示函数定义的参数
public List<String> getArgumentDesc() {
     return desc;
}

上述操作以后,定制函数代码部分已基本完成。

4.编译并打包

私人定制函数开发完成以后,就可以对代码进行编译打包(建议通过Maven工厂进行编译打包),随后我们需要将编译打包生成的Jar包放置JMeter安装目录lib/ext目录下,并且重启JMeter。
在这里插入图片描述
如果放Jar包的时候JMeter已经打开,务必需要重启JMeter工具,不然私人定制的函数无法通过动态加载的方式在JMeter的函数助手中找到。

5.JMeter调用私人定制函数

当上述所有开发动作、打包和部署完成以后,我们便可以在JMeter的函数助手中找到我们私人定制的函数,如下图样例所示。当输入参数以后点击生成按钮就可以预览我们私人订制函数的结果,并且可以通过函数引用${__JmeterFunctionDemo(37090,男)}在其他元件中进行相应结果引用。
在这里插入图片描述

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐