2021-09-30

Jmeter自定义函数开发


二次开发背景:

在Jmeter的函数助手里,有很多内置的函数,比如Random、UUID、time等等。使用这些函数可以快速帮我们生成某些数据,进行一些逻辑处理。用起来非常的方便。但是在实际接口测试过程中,有很多的需求,Jmeter内置的函数可能并不能满足我们的需求。这个时候我们可以通过自己编写代码,扩展Jmeter的内置函数。

接下来,主要讲解如何用Java语言,配合idea 二次开发Jmeter 函数

简单将步骤过程: 创建maven项目 —> pom依赖配置—>注意实现规则—>代码实现—>打jar包—>放到jmeter目录(lib/ext)—>玩耍

1.首先,使用idea,新建maven工程,如下图,创建出一个maven工程
在这里插入图片描述
在这里插入图片描述

2.配置pom.xml依赖,配置以后,会有报错,不要着急(复制注意版本,下方截图有说明)

<dependencies>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_core</artifactId>
        <version>5.1.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.jmeter</groupId>
        <artifactId>ApacheJMeter_java</artifactId>
        <version>5.1.1</version>
    </dependency>
</dependencies>

在这里插入图片描述

3.配置项目的maven版本以及指定setting文件,和本地maven仓库
3.1 点击 file–Settings–输入框搜索maven,如下图看到这个页面,最后点击ok
在这里插入图片描述

3.2 配置好了以后,下载maven依赖
在这里插入图片描述

4.创建package,实现扩展jmeterfunction,主要有两点:

4.1.实现function的类的package声明必须包含".functions"

在这里插入图片描述

4.2.需要继承org.apache.jmeter.functions.AbstractFunction,并且实现相应的方法

在这里插入图片描述

4.3 代码说明(代码都有写注释每个步骤和属性以及方法,可以进行参考,按实际自己的需要进行改动):

属性:
自定义函数的参数名称列表,List类型
自定义函数的名称,String类型
保存用户输入数据的数组,CompoundVariable[]类型

方法:
execute:执行函数的逻辑
getArgumentDesc:返回自定义函数所有的参数名描述
setParameters:获取用户输入的参数
getReferenceKey:返回自定义函数的名称
package com.randomstr.jmeter.functions;
 
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;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
 
public class RandomStrFunction extends AbstractFunction {
    // 函数助手展示出来的参数说明
    private static final List<String> param = new LinkedList<>();
     
    // 在函数助手中展示出来的名字,你定义的是什么,最终就从函数助手中找这个名字
    private static final String KEY = "__randomStr";
     
    // 定义数组接收jmeter函数助手输入的参数
    private CompoundVariable[] values;
    static {
        param.add("输入指定字母");
    }
 
    /**
     * 自定义函数逻辑处理
     * @param sampleResult
     * @param sampler
     * @return
     * @throws InvalidVariableException
     */
    @Override
    public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {
        // 接收参数中的作为字符串前缀,使用random进行拼接字符串后,进行返回
        String startWith = values[0].execute().trim();
        Random rand = new Random();
        int ranInt = rand.nextInt(1000000);
        return startWith + ranInt;
    }
 
    /**
     * 获取用户输入的参数值,并保存到CompoundVariable[] 中
     * @param collection
     * @throws InvalidVariableException
     */
    @Override
    public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
 
        // 检查用户输入的参数是否正确, 从入参判断 长度最长1  最小也是1 也就是只能是一个参数,如果多参数这里要改一下
        checkParameterCount(collection, 1, 1);
        this.values = collection.toArray(new CompoundVariable[collection.size()]);
    }
 
    /**
     * 给Jmeter返回自定义函数的名称
     * @return
     */
    @Override
    public String getReferenceKey() {
        return KEY;
    }
 
    /**
     * 返回自定义函数的参数名称描述
     * @return
     */
    @Override
    public List<String> getArgumentDesc() {
        return param;
    }
}

5.我们编写了代码后,需要把代码打成jar包,然后放到jmeter的 lib/ext目录下,最后重启jmeter,去函数助手中就可以找到了
5.1 使用maven,打jar包,如下
在这里插入图片描述

5.2 粘贴jar到指定目录 lib/ext, 如下

在这里插入图片描述

5.3 jmeter操作,好了完成,愉快的玩耍吧

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值