Jmeter工具二次开发

编程入门 行业动态 更新时间:2024-10-24 01:48:48

Jmeter<a href=https://www.elefans.com/category/jswz/34/1770073.html style=工具二次开发"/>

Jmeter工具二次开发

一、JMeter 二次开发方向

1、函数开发,主要为JMeter 函数库

2、插件开发,一般主要做取样器开发

3、基于执行引擎开发,有效解决单独开发的测试平台或工具中,底层执行引擎开发相对复杂、周期长的问题,利用 JMeter 执行引擎的 API 进行基础的调用、监听、提取等操作,加速底层执行引擎开发效率。

二、环境准备

JDK:Java 开发工具包,是所有 Java 开发或项目运行的基础。

IntelliJ IDEA: Java 项目开发的集成开发工具,也可以用 Eclipse。

JMeter:性能测试工具。

三、Jmeter函数开发

JMeter 自带函数库中,提供了丰富的函数,并被广泛使用,如__Random、__UUID 等

可以通过菜单工具-> 函数助手对话框进行测试使用。

但是JMeter 自带的函数并一定能满足所有业务需要,因此需要基于 JMeter 进行二次开发新还是。

3.1、自定义函数基础

自定义函数必须继承 AbstractFunction 类,并重写父类的 4 个方法

(1)getArgumentDesc,函数参数描述,如果自定义函数有参数,用于返回函数参数说明

(2)execute,函数执行逻辑,必需,自定义函数的核心逻辑,并返回经过处理后的内容

(3)getReferenceKey,函数名,必需,返回一个字符串,表示在 JMeter 中自定义函数的函数名,一般以双下划线开头,如__Operate

(4)setParameters,设置函数接收参数值,如果自定义函数有参数,用于接收调用时传递过来的参数,注意使用时,字符串参数不要加双引号

编码格式如下

package com.functions;   #com.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.List;#test为新见的类名,继承AbstractFunction的方法public class test extends AbstractFunction {@Overridepublic List<String> getArgumentDesc() {//自定义函数参数列表return null;}@Overridepublic void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {//用来接收、处理用户调用函数时所输入的参数值}@Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {//函数的执行主体,函数逻辑处理,最终的处理返回结果return null;}@Overridepublic String getReferenceKey() {//函数的名称,及引用时调用的函数名return null;}}

3.2、IDEA 新建project

3.3、添加依赖包

两个jar包在JMeter安装目录下的\lib\ext 文件夹,在工程里创建一个lib目录,把jar粘贴到里面,然后再按下图顺序添加依赖

ApacheJMeter_components.jar

ApacheJMeter_core.jar

3.4、在src文件下新建一个包package,创建的包命名以functions结尾,如命名为“org.apache.jmeter.functions”,该创建的类继承AbstractFunction类的方法

3.5、在创建的package “org.apache.jmeter.functions”下面新增class 如命名为“IsJoinFunction”,并继承jmeter自带的AbstractFunction。

3.6、按照模版格式:

a.添加导入模块

b.让新增的类继承AbstractFunction

c.添加4种方法,并且实现具体的业务逻辑

3.7、代码编写完成之后,编译、导出jar包

a.配置Artifacts

b.编译Artifacts,生成jar包

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

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

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

3.8、把jar包放在JMeter的lib\ext目录下,然后重启JMeter即OK。

四、自定义函数demo

功能:通过输入3个数字,拼接为一个三位数

package org.apache.jmeter.functions;import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler;import java.util.Collection;
import java.util.LinkedList;
import java.util.List;public class IsJoinFunction extends AbstractFunction {public String numberOne = "";public String numbertwo = "";public String numberThree = "";//定义函数参数列表@Overridepublic List<String> getArgumentDesc() {List<String> parms = new LinkedList<String>();parms.add("请输入数字(示例:1)");parms.add("请输入数字(示例:2)");parms.add("请输入数字(示例:3)");return parms;}//用来接收、处理用户调用函数时所传入的参数值@Overridepublic void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {//collection为getArgumentDesc函数接收到的用户输入的值//检查用户输入的参数值是否等于3个checkParameterCount(collection,3);//把Collection<CompoundVariable>转换为数组,固定写法Object[] parmsData = collection.toArray();//把data对象取值做CompoundVariable类型的强制转换,再用execute把值转为String类型numberOne = ((CompoundVariable)parmsData[0]).execute();numbertwo = ((CompoundVariable)parmsData[1]).execute();numberThree = ((CompoundVariable)parmsData[2]).execute();}//函数的执行主体,执行具体的业务逻辑、功能@Overridepublic String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {String isJoin = numberOne + numbertwo + numberThree;return isJoin; //把执行结构返回给用户}//要调用的函数名称@Overridepublic String getReferenceKey() {String key = "__isJoin";return key ;}
}

继承AbstractFunction 类的四个方法分别如下:

4.1、getArgumentDesc函数:参数描述

    public List<String> getArgumentDesc() {List<String> parms = new LinkedList<String>();parms.add("请输入数字(示例:1)");parms.add("请输入数字(示例:2)");parms.add("请输入数字(示例:3)");return parms;}

4.2、setParameters:把用户输入的参数值进行处理

 public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException {//collection为getArgumentDesc函数接收到的用户输入的值//检查用户输入的参数值是否等于3个checkParameterCount(collection,3);//把Collection<CompoundVariable>转换为数组,固定写法Object[] parmsData = collection.toArray();//把data对象取值做CompoundVariable类型的强制转换,再用execute把值转为String类型numberOne = ((CompoundVariable)parmsData[0]).execute();numbertwo = ((CompoundVariable)parmsData[1]).execute();numberThree = ((CompoundVariable)parmsData[2]).execute();}

4.3、execute方法:具体的逻辑实现,结果通过return返回

public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException {String isJoin = numberOne + numbertwo + numberThree;return isJoin; //把执行结果返回给用户}

4.4、getReferenceKey函数:比较简单,就是定义函数的名称,主要注意的是需要是两个下划线开头,这是JMmter规范要求的。

public String getReferenceKey() {String key = "__isJoin";return key ;}

更多推荐

Jmeter工具二次开发

本文发布于:2023-11-15 17:56:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1603769.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:工具   Jmeter

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!