JMeterEngine接口比较简单,总共7个方法,但是没javadoc,所以光看接口的话只能凭方法名猜测了。我们这里简要分析下:
1. configure(HashTree testPlan)
前面博文已经说过HashTree是JMeter跑测试依赖的数据结构,也提到过HashTree的结构一般是TestPlan-->ThreadGroup-->Sampler-->ResultCollector,这个方法就是在跑测试之前配置下这些测试数据了。参考StandardJMeterEngine,从HashTree中解析出TestPlan, 获取TestPlan的serialized和tearDownOnShutdown并保存为local属性,同时把整个HashTree也保存到local。
(Note: 解释下关于上面两个保存到local的属性,StandardJMeterEngine依赖线程组ThreadGroup, 一个测试中可能会有多个线程组,如果serialized为true,则StandardJMeterEngine会串行的去跑这些线程组,每启动一个ThreadGroup主线程都会等它结束;否则就并行跑所有的线程组。而tearDownOnShutdown是和PostThreadGroup配合使用的,这个Special Thread Group专门用来做清理工作,参考该类的javadoc):
/** * PostThreadGroup is a special type of ThreadGroup that can be used for * performing actions at the end of a test for cleanup and such. */
如果在HashTree配置中有PostThreadGroup,那么在主线程组(ThreadGroup)跑完之后,StandardJMeterEngine会去check这个tearDownOnShutdown属性,若该属性值true就启动PostThreadGroup。
2. runTest()
调用该方法用来跑测试。还是参考StandardJMeterEngine的实现,很简单,作为Runnable,启动一个线程并触发它的run()方法,若报异常则调下stopTest(),抛出JMeterEngineException。至于真正跑测试的过程run()方法,放到后面分析StandardJMeterEngine部分.
3. stopTest(boolean now)
停止测试,若now为true则停止动作立即执行;若为false则停止动作缓刑,它会等待当前正在跑的测试至少跑完一个iteration。
4. reset()
重置。在StandardJMeterEngine中就是直接调用stopTest(true).
5. setProperties(Properties p)
设置属性,可以将额外的配置文件通过该方法添加进去。它会保存在JMeterUtils中,该类保存了JMeterEngine runtime所需要的所有配置参数,在前面博文有分析过。
6. exit()
是为Remote Test准备的,如果当前的测试是从一个客户端的JMeter跑远程JMeterEngine的remote samples,则应该调用该exit()方法来关闭远程的测试.
7. boolean isActive()
是否该JMeterEngine是active状态,在confgiure()的时候设该值为true,在跑完测试(指的是该JMeterEngine所有ThreadGroup)之后设置为false。言下之意是,如果active==true,则说明该JMeterEngine已经配置完测试并且还没跑完,我们不能再进行configure或者runTest了;若active == false, 则该JMeterEngine是空闲的,我们可以重新配置HashTree,跑新的测试.
很简单吧,相信看到这里,已经很容易coding进行代码驱动JMeter了。下面再简要分析下JMeterEngine的标准实现StandardJMeterEngine,先给个类图作为整体认识:
简要解读:HashTree是依赖的数据结构;SearchByClass用来查找HashTree中的所有节点,并把节点实例化为真正的对象,例如图中TestPlan/ThreadGroup/JavaSampler/ResultCollector在HashTree中本来都是只是配置,全部通过SearchByClass实例化的;实例化出来的对象如果是TestStateListener类型,则会在有生命周期的函数回调,测试前调testStarted,结束掉testEnded, 比如ResultCollector是该类型的一种,在结束的时候回调testEnded方法完成report的写入;PreCompiler用来解析Arguments, 把TestPlan节点中配置的参数作为JMeterVariables加入到测试线程上线文中;ThreadGroup用来用来管理一组线程,包括线程的个数/启动/关闭等;StopTest作为其内部类对外不可见,作为一个Runnable,作用是异步停止测试,前面分析JMeterEngine接口时提到的stopTest方法也是通过该内部类实现的。
现在可以分析跑测试的流程了,StandardJMeterEngine.run()方法:
1) JMeterContextService清零:numberOfActiveThreads=0, 重置testStart时间
2) PreCompiler the Tashree,作用见“简要解读”
3) 利用SearchByClass解析所有TestStateListener 加入到testList中
4) 触发 3) 中解析的testListener的testStarted方法:ResultCollector会递增instanceCount,初始化fileOutput;TestPlan会设置FileServer的basedir,添加classpath; JavaSampler会初始化真正要跑的AbstractJavaSamplerClient类;
5) 利用SearchByClass解析所有ThreadGroup(包括SetupThreadGroup,ThreadGroup, PostThreadGroup)
6) 实例化一个ListenerNotifier实例,用来通知事件发生
7) 启动所有SetupThreadGroup(一般情况下没有SetupThreadGroup)并等待到都结束
8) 进行一次gc后 开始跑真正的测试,即启动所有的ThreadGroup,这里会检查serialized属性,用来判断是否这些ThreadGroup串行执行
9) block here, 等待所有的ThreadGroup结束
10)若有 PostThreadGroup(一般没有),执行所有的PostThreadGroup并等待至所有PostThreadGroup结束
12) 触发 3)中解析的testListener的testEnded方法:JavaSampler会调用真正跑的AbstractJavaSamplerClient的teardownTest方法,可以打印该JavaSamplerClient测试总共花费的时间;ResultCollector用来将测试结果写如文件生成;reportTestPlan用来关闭文件。
相关推荐
将 jpgc-graphs-basic-2.0.zip 解压缩后只有一个 lib 目录,该目录下有一个 ext 文件夹和一个 jmeter-plugins-cmn-jmeter-0.3.jar 包,ext 文件夹中有 jmeter-plugins-graphs-basic-2.0.jar 和 jmeter-plugins-...
Apache jmeter jmeter-plugins-cmn-jmeter-0.6.jar 下载
https://blog.csdn.net/qq355667166/article/details/78914453),经过测试同学选型最终确认了采用jmeter+插件化jmeter-plugins-for-apache-dubbo(https://github.com/thubbo/jmeter-plugins-for-apache-dubbo)的...
本文将深入探讨“jmeter-plugins-dubbo-2.7.1-jar-with-dependencies”这一系统压测工具包,它专门针对基于Java的Dubbo服务进行性能测试。了解并熟练掌握这一工具,能帮助我们更好地优化服务性能,提升系统的稳定性...
jmeter的dubbo插件,jmeter-plugins-dubbo-2.7.8-jar-with-dependencies.jar,适用于JMeter5.4.1版本,将解压后的文件jmeter-plugins-dubbo-2.7.8-jar-with-dependencies放在Jmeter安装目录下的\lib\ext文件夹中,...
apache-jmeter-5.6.3.zip apache-jmeter-5.6.3.tgz apache-jmeter-5.6.3_src.zip apache-jmeter-5.6.3_src.tgz
本文将深入探讨"jmeter-plugins-dubbo-2.7.1-jar-with-dependencies (1)"这个压缩包中的关键知识点。 1. **JMeter Plugins for Dubbo** JMeter Plugins for Dubbo 是一个扩展了JMeter功能的插件,专门用于测试基于...
jmeter-plugins-dubbo-2.7.1-jar-with-dependencies 2.jar jmeter本身并不支持dubbo接口的测试,需要下载第三方插件,然后将jar包放入${JMETER_HOME}\lib\ext路径下,重启即可。
jmeter-plugins-dubbo with-dependencies jmeter-plugins-dubbo-2.7.7-jar-with-dependencies.jar
4个jmeter测试报告模板集合 jmeter.results.shanhe.me.xsl jmeter.results.zyanycall.me.xsl jmeter-results-detail-report_30.xsl jmeter-results-report_21.xsl
《JMeter管理插件——jmeter-plugins-manager-1.7.jar深度解析》 Apache JMeter是一款功能强大的性能测试工具,广泛应用于Web应用、FTP服务器、数据库等服务的压力测试。为了扩展JMeter的功能,社区开发了各种插件...
jmeter-plugins-graphs-basic-2.0.jar是jmeter性能测试图形化显示插件
【JMeter】JMeter插件管理插件:jmeter-plugins-manager-1.3.jar Apache JMeter是一款开源的性能测试工具,广泛应用于Web应用、FTP服务器、数据库等服务的负载和压力测试。JMeter的强大之处在于其丰富的插件生态...
Apache JMeter (apache-jmeter-5.5.zip)可用于测试静态和动态资源、Web 动态应用程序的性能。 它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。 Apache JMeter...
拷贝jmeter-parallel-0.9.jar到Jmeter/lib/ext上。 启动Jmeter。 根据需要添加Parallel Controller: 1)在Jmeter的线程组下面的逻辑控制器,选择bzm并行控制器; 2)把浏览器或者wireShark观察到的同一批次的并发...
其中,`jmeter-plugins-manager-1.4.jar`是JMeter的插件管理器,它为用户提供了方便的方式来安装、更新和管理JMeter的各种插件。本文将详细介绍这个插件及其功能。 一、JMeter Plugins Manager的安装与使用 1. **...
标题 "jmeter-results-detail-report_30.rar" 暗示了这可能是一个使用Apache JMeter工具进行性能测试后的结果报告。JMeter是一款开源、Java编写的负载和性能测试工具,广泛应用于Web应用的压力测试。这个压缩包很...
本文将详细介绍"jmeter-plugins-manager-1.3.jar.zip"的安装过程以及其功能和使用方法。 首先,我们来看"jmeter-plugins-manager-1.3.jar.zip"这个压缩包。它包含了JMeter Plugins Manager的1.3版本,这是一个帮助...
本文将深入探讨"jmeter-plugins-extras-libs-1.1.3"和"jmeter-plugins-standard-1.1.3"这两个版本的插件,解析它们的核心价值和应用场景。 首先,我们关注"jmeter-plugins-extras-libs-1.1.3"。这个名字中的"extras...
"apache-jmeter-5.6.2.zip"是JMeter的5.6.2版本的压缩包文件,包含了运行和配置JMeter所需的所有组件。 JMeter的特性与功能: 1. **跨平台性**:由于JMeter是用Java编写的,因此它可以运行在任何支持Java的平台上...