JMeter 源码二次开发函数示例
JMeter 源码二次开发函数示例
一、JMeter 5.0 版本
实际测试中,依靠jmeter自带的函数已经无法满足我们需求,这个时候就需要二次开发。本次导入的是jmeter 5.0的源码进行实际的函数开发。
二、开发函数

在src/functions新建class-IntThreeSum(函数求和)
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 org.apache.jmeter.threads.JMeterVariables;
import org.apache.jmeter.util.JMeterUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
/**
* @ClassName IntThreeSum三个参数求和
* @Description TODO
* @Author Hardy.Feng
* @Date 2018/12/20 14:00
* @Version 1.0
**/
public class IntThreeSum extends AbstractFunction { //继承AbstractFunction类,必须对父类的代码重写
private static final Logger log = LoggerFactory.getLogger(IntThreeSum.class);
private static final List<String> desc = new LinkedList<>(); //描述
private static final String KEY = "__IntThreeSum"; //方法描述,必须双下划线
static {
desc.add(JMeterUtils.getResString("first_param"));
desc.add(JMeterUtils.getResString("secone_param"));
desc.add(JMeterUtils.getResString("third_param"));
}
private Object[] values;
public IntThreeSum() {
}
@Override
public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
JMeterVariables vars = getVariables();
int sum = 0;
String varName = ((CompoundVariable) values[values.length - 1]).execute().trim();
log.info("varName==>:{}", varName);
//遍历获取3个数之和
for (int i = 0; i < values.length - 1; i++) {
sum += Integer.parseInt(((CompoundVariable) values[i]).execute());
}
try {
sum += Integer.parseInt(varName);
varName = null;
} catch (NumberFormatException ignored) {
}
String totalString = Integer.toString(sum);
if (vars != null && varName != null) {
vars.put(varName.trim(), totalString);
log.info("varName:", vars.get(varName.trim()));
}
return totalString;
}
@Override
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
//对入参进行检查,最小3个参数
checkMinParameterCount(parameters,3);
values = parameters.toArray();
}
@Override
public String getReferenceKey() {
return KEY;
}
@Override
public List<String> getArgumentDesc() {
return desc;
}
}
三、测试类Test

在test/src新建测试类IntThreeSumTest
package org.apache.jmeter.functions;
import org.apache.jmeter.JMeter;
import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.junit.JMeterTestCase;
import org.apache.jmeter.threads.JMeterContext;
import org.apache.jmeter.threads.JMeterContextService;
import org.apache.jmeter.threads.JMeterVariables;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.LoggerFactory;
import static org.apache.jmeter.functions.FunctionTestHelper.makeParams;
import java.util.Collection;
/**
* @ClassName IntThreeSumTest
* @Description TODO
* @Author hardy.Feng
* @Date 2018/12/20 14:30
* @Version 1.0
**/
public class IntThreeSumTest extends JMeterTestCase {
@Test
public void sumTest() throws Exception {
IntThreeSum intThreeSum = new IntThreeSum();
checkInvalidParameterCounts(intThreeSum,3); //检查一下参数最小入参3位
Collection<CompoundVariable> params = makeParams("1","2","3");
intThreeSum.setParameters(params);
String totalString = intThreeSum.execute();
System.out.println("total:" + totalString);
}
}
四、导出jar文件
如果测试类测试没有问题,就可以导出class为jar文件。放到lib/ext目录下面,如下图所示



五、启动jmeter

函数已经生效。欢迎留言讨论。
公众号:大家可以关注:

JMeter 源码二次开发函数示例的更多相关文章
- Jmeter - 源码开发环境配置
step1: 创建一个JavaProject , 我们命名为 JmeterSrcDev,点击Next.
- JMeter源码集成到Eclipse
由于JMeter纯Java开发,界面也是基于Swing或AWT搞出来的,所以想更深层次的去了解这款工具或对于想了解JMeter插件开发或二次开发的童鞋们来说,读读JMeter的源码估计是必不可少的,所 ...
- [转载]JMeter源码导入Eclipse
转载自:http://www.cnblogs.com/taoSir/p/5144274.html 由于JMeter纯Java开发,界面也是基于Swing或AWT搞出来的,所以想更深层次的去了解这款工具 ...
- jmeter源码导入eclipse并执行
由于JMeter纯Java开发,界面也是基于Swing或AWT搞出来的,所以想更深层次的去了解这款工具或对于想了解JMeter插件开发或二次开发的童鞋们来说,读读JMeter的源码估计是必不可少的,所 ...
- [Jmeter系列]Jmeter源码编译步骤(转)
官网:http://jmeter.apache.org/building.html 1,在apach官网download源码: http://jmeter.apache.org/download_ ...
- windows下在idea用maven导入spark2.3.1源码并编译并运行示例
一.前提 1.配置好maven:intellij idea maven配置及maven项目创建 2.下载好spark源码: 二.导入源码: 1.将下载的源码包spark-2.3.1.tgz解压(E:\ ...
- RocketMQ源码分析之从官方示例窥探:RocketMQ事务消息实现基本思想
摘要: RocketMQ源码分析之从官方示例窥探RocketMQ事务消息实现基本思想. 在阅读本文前,若您对RocketMQ技术感兴趣,请加入RocketMQ技术交流群 RocketMQ4.3.0版本 ...
- 从比心APP源码的成功,分析陪玩系统源码应该如何开发
提起游戏陪玩系统,相信大家都不陌生.作为一名骨灰级的手游玩家,小编对于陪玩系统源码也有些了解.在互联网络发展愈发迅速的今天,游戏产业在一中领域中脱颖而出,据统计,手机游戏用户已经达到5.29亿,较20 ...
- JMeter源码导入到Intellij IDEA (八)
亲测:jmeter源码导入Intellij IDEA,导入,编译,运行! 一.环境:windows10操作系统,jdk1.8,Intellij IDEA 2018.3,jmeter5.0 下载jmet ...
随机推荐
- Draw Call(Unity 5中显示为SetPass calls
Draw Call(Unity 5中显示为SetPass calls
- jqzoom插件图片放大功能的一些BUG
建议使用cloud-zoom插件,jqzoom插件就不要使用了 点击查看——图片放大镜——jQuery插件Cloud Zoom 刚开始使用的是jqzoom插件,但问题太多了,就不说插入到页面中使用了, ...
- 怎么查这个文件在linux下的哪个目录
因为要装pl/sql所以要查找tnsnames.ora文件..看看怎么查这个文件在linux下的哪个目录 find / -name tnsnames.ora 查到: /opt/app/oracle/p ...
- An Introduction To Value at Risk (VAR)
http://www.investopedia.com/articles/04/092904.asp http://www.jpmorgan.com/tss/General/email/1159360 ...
- Golang之方法(自定义类型,struct)
方法的使用,请看本天师的代码 //Golang的方法定义 //Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,不仅仅是struct //定义:func (recevier ...
- [Selenium]怎样等待元素出现之后再消失,譬如Loading icon
界面上有些元素是要先等它出现,再等它消失,譬如loading icon 这个是等多个loading icon出现后消失 /** * Wait for loading icon disappear in ...
- 没有Home键之后的iPhone会是什么样子?
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 之前笔者推测新一代的iPhone不会再有“Home”键.果不其然,9月13日苹果发布会证实了笔者的观 ...
- Maven项目下java.lang.ClassNotFoundException常规解决办法
网上很多要修改.class .project的比较麻烦有时候还不一定管用.下面的方法适合于项目用已经引用了jar,但是运行时却ClassNotFound,请用如下方法试试: 严重: Error con ...
- WEB开发常见错误-php无法操作数据库
Ubuntu 安装phpmyadmin 和配置 ubuntu 安装 phpmyadmin 两种 : 1: apt-get 安装 然后使用 已有的虚拟主机目录建立软连接 sudo apt-g ...
- 20155230 2016-2017-2 《Java程序设计》第七周学习总结
20155230 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 世界时:在1972年引入UTC之前,GMT与UT是相同的 格林威治标准时间(GMT),现已不 ...