JMeter 源代码解读(一)
jmeter是如何启动的
00-1010随着公司业务的快速扩张和爆发式增长,目前的测试工具已经不能更好、更全面地覆盖所有业务和协议,不同业务部门之间的加密方式也不尽相同,因此jmeter工具已经不再适合当前的业务需求。考虑到性能测试、单边jar包和beanshell已经严重限制了性能结果的准确性,本文分析了jmeter的开源代码。为了解决当前的问题,需要为项目定制工具。
00-1010 .了解jmeter的结构
了解jmeter的启动工作原理。
1 背景
10-1010下载地址:http://jmeter.apache.org/download_jmeter.cgi下载后,解压zip文件。
PS:这里需要注意的是,5.2版本之后,工具维护已经切换,不再采用ant build,而是采用Gradle build,不需要修改文件。
00-1010看源代码结构目录。如下所示:
2 解读源代码目的
dcdkf-包含。蝙蝠和。sh这些文件用于启动JMeter。它还包括ApacheJmeter.jar和相关的配置文件。由构建脚本创建的目录存储由构建过程生成的一些文件。
Dist-build脚本创建一个饥饿目录来存储最终的输出文件。
文档-JMeter相关目录
其他与额外服务相关的文件
lib-包含JMeter依赖的相关文件。
Src子目录包含支持的协议和相关组件代码。
测试单元测试目录
Xdocs-xml文件用于生成文档,JMeter使用xml生成文档(主要核心思想,后期主要代码讲解要点)
00-1010 ext-包含与JMeter核心和协议相关的jar文件。将这些jar文件分开的原因是,如果它们都放在lib/directory中,启动速度会很慢。
一些可选的jar用于JMeter的一些可选功能。这些JARs只会在构建和运行时引入。用户可以自己下载可选的jar,放在整个目录中。
00-1010 .core-jmeter核心函数和接口的代码目录,分析的重点
组件——一些与协议无关的类,比如协议、GUI组件等。
示例-采样器的一些示例
功能-其他组件将使用的一些标准功能。
JOR phan-公共方法类
协议-不同的协议支持代码
与JUnit测试相关的代码
请检查创意目录与下载目录是否一致。
3 IDEA编译jmeter
上图为杰姆特启动的程序入口。
那么,如果你启动这个程序,你会怎么做?
3.1 jmeter源代码下载
age/1f3677157f84439aa6848d91dd051f80?from=pc">上图红色全中是jmeter的环境变量检查。
3.3.2 程序初始化
上图就是初始化
下图是我在代码添加了注释,方便阅读
3.3.3 初始化检查通过后,开始执行启动
上图红色圈中解释如下:
这一块涉及了 启动的判断
· jmeter.sh的启动 (这里要分操作系统,有些linux是有GUI界面的,也可以看得见,比如ubuntu,cenos 等,所以不能都认为是非GUI命令)
· jmeter.bat的启动
· jmeter.jar的启动
· jmeter非GUI命令启动
然后开始进行下一步,寻找jar目录,lib,ext等的完整性
3.3.4 主main程序
在3.3.3的步骤中,如果完整性检查通过,则进入程序的main.
这里的程序做了哪些事情呢?
这里的主main需要声明一下
· 先判断一下EXCEPTIONS_IN_INIT 是否为空,如果不为空就表示静态初始化有异常,直接退出进程并打印错误信息。
· 初始化一些基本的日志配置
· 用刚才初始化的 classloader 加载类 org.apache.jmeter.JMeter
· 通过java 反射的方式来调用 org.apache.jmeter.JMeter 的 start 方法,正式完成 JMeter 的启动
下图就是反射调用启动star
以上jmeter启动就结束了。下图是debug的截图
4 总结
1. 了解jmeter的结构,有助于我们要对它进行第二次开发应该注意细节
2. 了解jmeter的启动,阅读代码是理解jmeter工作的最好方式
原创内容,转载请说明出处。