JMeter源码分析之JMeter总体架构

2020-01-04

JMeter的目录和启动方式

JMeter的目录结构为:
根目录下,最重要的是lib/和src/文件夹,其中lib/ext文件夹下存放JMeter协议相关的jar包。如果开发或者使用第三方包,就会放到这个文件夹。

图片中,dubbo和websocket的jar包是我下载的第三方包。

src/文件夹下,
core 是JMeter的核心功能区。
components 存放GUI相关的组件。
functions 存放一些其他组件会使用的标准函数,比如有BeanShell.java、CSVRead.java、UrlEncode.java等文件。
jorphan - 公共方法类,比如处理其中的HashTree和命令行中的处理方法。

JMeter的架构

JMeter的整体架构如下图:

其中NewDriver、StandardJMeterEngine等分别对应具体的java文件。
NewDriver为JMeter的入口类,提供main函数启动JMeter.

在JMeter对应的这样的一个普通结构

它的存储方式是用jmx结尾的文件来存储的。

可以看到JMeter的界面中的HTTP取样器对应到jmx文件中是被HTTPSamplerProxy标签所包裹的那一部分,其中的在GUI界面中的数据会对应到其中。

除了JMeter自身支持的HTTP协议,TCP、JDBC等,如果要测试Dubbo接口,JMeter自身是不支持Dubbo接口的,如果要测试Dubbo接口,那就需要使用第三方插件来进行支持。比如经常使用的dubbo插件,
jmeter-plugins-dubbo-2.7.3-jar-with-dependencies.jar
将这个插件放到JMeter的lib/ext文件夹下后,在重新启动JMeter后,JMeter就可以支持Dubbo接口了。
Protocol选择zookeeper或者none,如果选择zookeeper,在Address中则填写zookeeper的地址,用逗号分隔,如果填写none则填写具体服务的地址。

这个JMeter脚本导出后的jmx文件如图。

JMeter插件与解析jmx文件

HashTree和数据结构中的哈希树不是一个概念,这里的HashTree是JMeter独立构造的一个数据结构,HashTree的定义在org.apache.jorphan.collections.HashTree进行了定义。

jmx文件转换为HashTree是通过core文件夹下的SaveService.java来实现的,通过loadTree、readTree方法转换为HashTree。

saveservice.properties文件中,记录jmx文件标签和JMeter中对应类的对应关系。

JMeter的关键类和方法


这是我做的一份脑图,可以通过这个链接查看细节。

参考链接:

小兵@工厂博客
Mo小泽的技术博客