jmeter 核心_JMeter 源代码解读(一)

本文是JMeter源代码解读的第一部分,详细介绍了JMeter的启动过程,包括环境变量检查、程序初始化、启动判断及主main程序的执行。通过分析,读者可以了解JMeter的结构和启动原理,为后续的定制化开发提供基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JMeter 源代码解读(一)

jmeter是如何启动的

1 背景

随着公司业务急剧扩展,呈现爆发式的增长,当前测试工具已经无法更好,更全面的覆盖所有的业务以及协议,不同事业部之间也存在不同的加密方式,jmeter工具已经不适用于当前业务需求。考虑到涉及到性能测试,单方面的jar包以及beanshell已经严重制约性能结果的准确率,故而在此分析jmeter的开源代码。解决当前问题,对项目定制化工具需求。

2 解读源代码目的

· 了解jmeter的结构

· 了解jmeter的启动工作原理

3 IDEA编译jmeter

3.1 jmeter源代码下载

· 下载地址: http://jmeter.apache.org/download_jmeter.cgi

下载完成后,解压zip文件。

PS:这里要注意,5.2版本后已经切换工具维护,不再是ant构建,而是采用Gradle构建,不再需要修改文件。

3.2 打开文件开源文件

看下源代码结构目录。如下:

739a5ffcfb09504dc693b4174c2063b3.png

3.2.1 顶层目录

· bin - 包含.bat 和 . sh 这些文件用于启动JMeter。同时也包含了ApacheJmeter.jar 和 相关的配置文件

· build - build 脚本创建的目录,存放一些build过程生成的文件

· dist - build 脚本创建饿目录,存放最后输出的文件

· docs - JMeter 相关目录

· extras - ant 相关的其他文件

· lib - 包含JMeter 依赖的相关文件

· src - 子目录包含支持的协议和相关组件代码

· test - 单元测试目录

· xdocs - 用于生成文档的xml文件,JMeter用xml来生成文档(主要核心思想,后期主要的代码讲解点)

3.2.2 lib目录结构

· ext - 包含 JMeter 核心和协议相关的 jar 文件。把这些 jar 文件独立出来原因是如果都放在lib/目录里启动速度会变慢

· opt - 一些可选的 jar 用于 JMeter 的一些可选的功能。这些 jar 只有在build 和 运行的时候才会被引入。用户可以自己下来可选的 jar 放到整个目录里

3.2.3 src目录结构

· Core - JMeter 核心功能和接口的代码目录,分析的重点

· components - 和协议无关的一些类,例如协议, GUI 组件等

· examples - 一些sampler的例子

· functions - 一些其他组件会使用的标准函数

· jorphan - 公共方法类

· protocol - 不同的协议支持代码

· junit - 测试相关的代码

8f7280c6a0afb9831bd0743321119a25.png

请核对一下idea目录与下载的目录是否一致。

3.3 jmeter的主要入--NewDriver.java

c0741fd46354a8a6629fedd0055cc5f3.png

上图是jemter启动的程序入口。

那么,如果启动程序要做哪些事。

3.3.1 jmeter启动之前要做环境变量检查,如下图

0b1d17c7b8bae2671978c25ffd4bdef1.png

上图红色全中是jmeter的环境变量检查。

3.3.2 程序初始化

2b72244eddc52431c7222a58dab69241.png

上图就是初始化

下图是我在代码添加了注释,方便阅读

06b17b3d770e0d8fe178db213091d0e7.png

3.3.3 初始化检查通过后,开始执行启动

ef7721046bc152de64ae7565dbfc15f8.png

上图红色圈中解释如下:

这一块涉及了 启动的判断

· jmeter.sh的启动 (这里要分操作系统,有些linux是有GUI界面的,也可以看得见,比如ubuntu,cenos 等,所以不能都认为是非GUI命令)

· jmeter.bat的启动

· jmeter.jar的启动

· jmeter非GUI命令启动

然后开始进行下一步,寻找jar目录,lib,ext等的完整性

3.3.4 主main程序

在3.3.3的步骤中,如果完整性检查通过,则进入程序的main.

fcd99970b050f4083cea97eb01106e91.png

这里的程序做了哪些事情呢?

这里的主main需要声明一下

· 先判断一下EXCEPTIONS_IN_INIT 是否为空,如果不为空就表示静态初始化有异常,直接退出进程并打印错误信息。

· 初始化一些基本的日志配置

· 用刚才初始化的 classloader 加载类 org.apache.jmeter.JMeter

· 通过java 反射的方式来调用 org.apache.jmeter.JMeter 的 start 方法,正式完成 JMeter 的启动

下图就是反射调用启动star

6f96af3ade9031bc5a529f5eb4f55b7f.png

以上jmeter启动就结束了。下图是debug的截图

ffd42d01f10d8deaec9d6e01982af827.png
ffd42d01f10d8deaec9d6e01982af827.png

4 总结

1. 了解jmeter的结构,有助于我们要对它进行第二次开发应该注意细节

2. 了解jmeter的启动,阅读代码是理解jmeter工作的最好方式

原创内容,转载请说明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值