通过之前的篇幅我们了解了测试用例管理页面如何编写,接下来我们这篇将介绍性能测试平台核心部分代码-使用jmeter提供的api来实现性能测试用例的执行。jmeter是通过解析执行jmx文件来运行脚本的,执行过程中会往jtl文件存入摘要日志,然后通过jtl来生成性能测试报告,jmeter自然也提供了这一套流程的api,大致的执行流程图如下图所示:
加载jmeter.properties配置到Properties
通过JMeterUtils.loadJMeterProperties来加载安装目录的jmeter配置文件jmeter.properties的相关属性到JMeterUtils的成员变量appProperties成员变量中,以便之后获取相关配置(jmeter.properties便是存放jmeter一些初始化配置的文件)
JMeterUtils.loadJMeterProperties("C:/Program Files/jmeter/bin/jmeter.properties");
设置jmeter的安装目录
JMeterUtils.setJMeterHome("C:/Program Files/jmeter");
初始化jmeter本地化的一些参数,比如设置本地语言以及一些资源等等
JMeterUtils.initLocale();
通过SaveService.loadTree解析本地的jmx文件来运行脚本
//加载本地jmx脚本
HashTree jmxTree = SaveService.loadTree(file);
在hashtree里添加结果收集器
结果收集器是Jmeter用来收集运行日志摘要的。
这一步的主要作用是新建收集器来收集运行日志摘要,以便后面报告生成器能根据我们收集的日志摘要生成报告文件。
(1)初始化摘要相关配置信息,并且新建摘要对象
所以摘要内容对于我们生成报告文件是必不可少的,jmeter的api自然也需要新建摘要对象。
Summariser summer = null;
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
if (summariserName.length() > 0) {
summer = new Summariser(summariserName);
}
(2)初始化结果收集器
结果收集器的作用就是把把结果收集成摘要然后写到jtl日志文件,所以如果需要分析运行日志或者需要运行之后生成运行报告的话ResultCollector必不可少,如果不需要的话可以不添加
ResultCollector resultCollector = new ResultCollector(summer);
(3)设置jtl日志文件目录及文件名,并把该字符串设置到结果收集器中
String logFile = "d:\\tmp\\result.jtl";resultCollector.setFilename(logFile);
(4)把结果收集器也添加到之前生成的hashtree中
jmxTree.add(jmxTree.getArray()[0], resultCollector);
| hashtree转换
这一步主要是对我们之前构建的HashTree进行转换,作用是使得原来的hashtree转换成jmeter可以运行执行的hashtree结构
JMeter.convertSubTree(jmxTree,false);
根据HashTree执行测试用例
一步主要是通过设置我们转换后的HashTree,运行我们构建的测试用例。
public LocalRunner(HashTree jmxTree) {
this.jmxTree = jmxTree;
}
StandardJMeterEngine engine = new StandardJMeterEngine();
engine.configure(jmxTree);
engine.run();
生成性能测试报告
这一步主要是构建报告生成器,通过前面结果收集器记录的摘要日志生成结果报告文件。
主要作用还是生成测试用例执行结果的报告文件。
首先指定报告生成目录;然后初始ReportGenerator,初始化的时候加载reportgenerator.properties配置信息到configuration里面并且创建jtl文件,generate根据jtl文件内容的信息来生成报告的内容,并且指定了报告生产样式等内容。
//jmeter报告生成设置
ReportGenerator generator = new ReportGenerator(logFile,null);
JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, htmlReportStr);
generator.generate();
参考文献: