Jmeter二次开发之自定义函数
在工程的pom.xml文件中,引入jmeter二次开发所需要的jar包

<dependencies> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>5.4.1</version> </dependency> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_java</artifactId> <version>5.4.1</version> </dependency> </dependencies>
1、创建包名
在src/main/java 路径下创建包名为com.apache.jmeter.functions 包名前面可以随便取,但是结尾必须已functions结尾,否则无法被jmeter识别。
2、创建Java类
在functions包下创建一个Java类,名字可以随便取(尽量见名知意,遵守Java类驼峰命名规范),并继承AbstractFunction类,实现其execute、setParameters、getReferenceKey、getArgumentDesc 4个方法

execute方法:核心方法,执行的核心逻辑全部写在该方法中
setParameters:该方法用来接收和处理用户调该函数时所传递的参数值,如果定义的函数没有参数,则该方法可以为空
getReferenceKey:该方法用于获取函数名称
getArgumentDesc:该方法用于定义函数的参数,并且会将参数描述显示在GUI界面中
package com.apache.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; /** * Created by YangWeiMin on 2021/10/18 */ public class CalcGenerator extends AbstractFunction { private static final String KEY = "__calc"; // 自定义函数的参数及其参数列表说明 private static final List<String> params = new LinkedList<>(); // 通过此add方法可以添加多个参数 static { params.add("请输入计算类型, add或者minus"); params.add("请输入第一个数"); params.add("请输入第二个数"); } // 定义全局变量用于接收参数值 public int x; public int y; public String type = ""; @Override public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException { if (type.equals("add")) { return String.valueOf(x + y); } if (type.equals("minus")) { return String.valueOf(x - y); } return "计算类型异常,请重新输入"; } @Override public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException { checkMinParameterCount(parameters, 3); // 检测用户在调用该函数时所传参数最少是否为3个 Object[] values = parameters.toArray(); // 定义一个数组values用来存储用户的参数 type = ((CompoundVariable) values[0]).execute(); x = Integer.parseInt(((CompoundVariable) values[1]).execute()); y = Integer.parseInt(((CompoundVariable) values[2]).execute()); } @Override public String getReferenceKey() { return KEY; } @Override public List<String> getArgumentDesc() { return params; } }
其中定义了全局变量KEY,该变量的作用是定义函数的名字,该KEY在getReferenceKey方法进行返回即可
定义全局变量params,设置函数所需要的参数用于展示在jmeter中,该部分写在static 静态代码块中,并在getArgumentDesc中进行返回即可




浙公网安备 33010602011771号