jmeter使用Java开发自定义函数

一、前置条件(对jmeter进行二次开发)

本篇通过抽象类AbstractFunction来实现:

1、JMeter提供了接口给用户进行二次开发,其中接口可通过引入

ApacheJMeter_components.jar

ApacheJMeter_core.jar两个包获取。(或许你看到别人介绍所要用的jar包会更多,其实正常开发就这两个,所以至少保证有这两个包即可)

2、开发的代码需要符合JMeter的规范:

第一,新建的包名称必须是以 functions 结尾,包名如test.functions;

第二,方法类需要继承AbstractFunction类,而AbstractFunction类中有四个要实现的函数,其中我们要实现的功能需要结合这四个函数实现。

3、编辑Java程序

  • ApacheJMeter_components.jar

  • ApacheJMeter_core.jar   

 以上两个jar包在JMeter安装目录下的\lib\ext 文件夹(安装jmeter后会存在这两个包)

在工程里新建一个lib目录,把jar包复制到lib目录下

 

 然后添加到项目工程里(添加依赖包)

 

 

创建包以functions结尾

 

 

创建类继承AbstractFunction类

 直接继承会报异常,导入方法即可

 

 

 

 

 

 

 

 函数介绍:

 

 

 demo:

package test.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.Objects;

public class JavaRequestTest extends AbstractFunction {
//程序需要用到的参数需要提前定义
public String card_code="";
public String card_birthday="";
public String card_sex="";


//要调用的函数名称
@Override
public String getReferenceKey() {
//函数名称,及引用时调用的函数名
//比较简单,就是定义函数的名称,主要注意的是需要是两个下划线开头,这是JMeter规范要求的
String KEY="__AAATest";
return KEy;
}

@Override
public List<String> getArgumentDesc() {
//自定义函数参数列表
List<String> parms=new LinkedList<String>();
parms.add("请输入地区:");
parms.add("请输入生日:");
parms.add("请输入性别:");

return parms;
}
@Override
public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {
//用来接收,处理用户调用函数时所输入的函数参数值
//Collection为getArgumentDesc函数接收到用户输入的值
//检查用户输入的参数是否为3个
checkParameterCount(collection,3);
//把Collection<CompoundVariable>转换成数组,固定写法
Object[] parmsData = collection.toArray();

//把data对象取值做CompoundVariable类型的强制转换,再用excute把值转为String类型
card_code=((CompoundVariable)parmsData[0]).execute();
card_birthday=((CompoundVariable)parmsData[1]).execute();
card_sex=((CompoundVariable)parmsData[2]).execute();

}
@Override
public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {
//函数主体,函数逻辑处理,最终返回结果
String value=card_code+card_birthday+card_sex;

return value;
}
}

代码编辑完成后,生成jar包:
怎么在IDEA中把代码导出成jar包

三步走:

  • 配置Artifacts
  • 编译Artifacts,生成jar包
  • 把jar包放到JMeter

 

 

上一步只是设置了生成jar包的环境,接下来还需要编译代码,生成jar包

生成的jar默认放在工程目录的out/artifacts下,可直接复制~

另:若更新了代码,也只需直接“编译Artifacts”就行了,但若更新jar包,则需要重新配置环境!!

 

 

把jar复制到JMeter

一般放在lib目录就好,记得重启喔

这里示例的是java请求,放在/lib/ext下重启。查看函数助手

 

 

posted on 2023-02-07 10:34  yanmay  阅读(342)  评论(0编辑  收藏  举报

导航