JMeter5.4.1源码IDEA构建&二次开发(实战)

1.下载源码

https://jmeter.apache.org/download_jmeter.cgi前往下载源码

2.导入IDEA

2.1 先设置Gradle目录

未设置过Gradle的IDEA,建议先设置下Gradle的用户目录

2.2导入JMeter工程

2.3设置国内Gradle源

设置gradle的下载源

速度直接起飞!

重新加载Gradle,或者重新加载项目

接下来就是耐心的等等待,网速好的话,大约30-3h左右即可下载完毕。

2.4 执行 runGui

进行整体项目构建,熟悉的JMeter就可以打开了

3.新增系统函数

拿到源码我们是为了对JMeter进行二次开发,我当前的需求就是新增自定义的系统函数。

整体流程

  1. 系统函数是在 src/functions下。我们需要新增里面的系统函数

  2. 之后打出的jar包 我们需要替换到\apache-jmeter-5.2.1\lib\extApacheJMeter_functions.jar即可。

实战:新增自定义的UUID系统函数

我想新增一个去掉 - 的UUID系统函数。于是在java\org\apache\jmeter\functions新建了一个JAVA 类

package org.apache.jmeter.functions;

import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID; import org.apache.jmeter.engine.util.CompoundVariable;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.samplers.Sampler; /**
* 自定义创建一个不含有 - 的 UUID
* Create a custom UUID that does not contain “-”
*
* Parameters:
* - None
*
* Returns:
* - A pseudo random UUID 4
*
*/
public class UuidCustomer extends AbstractFunction { private static final List<String> desc = new LinkedList<>(); //定义 系统函数的名称
private static final String KEY = "__UUID2"; //$NON-NLS-1$ public UuidCustomer() {
} //执行的系统函数的操作
@Override
public String execute(SampleResult previousResult, Sampler currentSampler) throws InvalidVariableException {
return UUID.randomUUID().toString().replace("-", "");
} @Override
public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {
checkParameterCount(parameters, 0, 0);
} @Override
public String getReferenceKey() {
return KEY;
} @Override
public List<String> getArgumentDesc() {
return desc;
} }

运行测试一下

点击 runGui 运行测试一下

完美成功。接下来打包并替换到使用的JMeter上

打Jar包

成功之后会打一个jar包在

将此包重命名后进行替换

使用替换后JMeter查看

完美成功!

最新文章

  1. CentOS7 Jenkins安装
  2. [ASE]项目介绍及项目跟进——TANK BATTLE&#183;INFINITE
  3. 【GoLang】golang 交叉编译 实现&amp;工具
  4. java语言特性概述
  5. dataTransfer.getData()在dragover,dragenter,dragleave中无法获取数据的问题
  6. IE6中position:fixed无效问题解决
  7. mysql slave 错误解决
  8. win7自由调整CMD窗口
  9. HTML之学习笔记(七)列表
  10. 关于oracle数据库(11)
  11. 八、 Spring Boot 过滤器、监听器
  12. CSA单点登录环境配置
  13. tomcat源码研究之源码导入eclipse
  14. 利用shell脚本或者php移动某个文件夹下的文件到各自的日期组成的目录下
  15. C++箴言:理解typename的两个含义 nested dependent name(嵌套依赖名字)
  16. logback debug 日志没有信息
  17. Entity Framework应用:导航属性
  18. Artech的MVC4框架学习——第七章Action的执行
  19. 在Mac上用bootcamp安装windows,使用Android studio启动模拟器时蓝屏问题的解决方法
  20. golang笔记2_程序结构

热门文章

  1. C++算法代码——快速排序
  2. 文件描述符(File Descriptor)简介
  3. Django框架-模型层3/数据传输/Ajax
  4. EFCodeFirst Migrations数据库迁移
  5. HoloWAN在连接路由器时应该选择WAN口还是LAN口,有什么区别?
  6. Serverless 2.0,鸡蛋还是银弹?
  7. 剑指 Offer 63. 股票的最大利润 + 动态规划
  8. LeetCode-二叉树的深度
  9. 25个关键技术点,带你熟悉Python
  10. SpringBoot 开发提速神器 Lombok+MybatisPlus+SwaggerUI