前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从0到1开发测试平台(十六)如何调用Jmeter的Api

从0到1开发测试平台(十六)如何调用Jmeter的Api

作者头像
周辰晨
发布2021-04-26 11:14:34
2.3K2
发布2021-04-26 11:14:34
举报
文章被收录于专栏:软件测试架构师俱乐部

| 前言

通过之前的篇幅我们了解了测试用例管理页面如何编写,接下来我们这篇将介绍性能测试平台核心部分代码-使用jmeter提供的api来实现性能测试用例的执行。jmeter是通过解析执行jmx文件来运行脚本的,执行过程中会往jtl文件存入摘要日志,然后通过jtl来生成性能测试报告,jmeter自然也提供了这一套流程的api,大致的执行流程图如下图所示:

| 加载jmeter.properties配置到Properties

通过JMeterUtils.loadJMeterProperties来加载安装目录的jmeter配置文件jmeter.properties的相关属性到JMeterUtils的成员变量appProperties成员变量中,以便之后获取相关配置(jmeter.properties便是存放jmeter一些初始化配置的文件)

代码语言:javascript
复制
JMeterUtils.loadJMeterProperties("C:/Program Files/jmeter/bin/jmeter.properties");

| 设置jmeter的安装目录

代码语言:javascript
复制
JMeterUtils.setJMeterHome("C:/Program Files/jmeter");

| 初始化jmeter本地化的一些参数,比如设置本地语言以及一些资源等等

代码语言:javascript
复制
JMeterUtils.initLocale();

| 通过SaveService.loadTree解析本地的jmx文件来运行脚本

代码语言:javascript
复制
//加载本地jmx脚本
HashTree jmxTree = SaveService.loadTree(file);

| 在hashtree里添加结果收集器

结果收集器是Jmeter用来收集运行日志摘要的。

这一步的主要作用是新建收集器来收集运行日志摘要,以便后面报告生成器能根据我们收集的日志摘要生成报告文件。

(1)初始化摘要相关配置信息,并且新建摘要对象

所以摘要内容对于我们生成报告文件是必不可少的,jmeter的api自然也需要新建摘要对象。

代码语言:javascript
复制
Summariser summer = null;
String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
if (summariserName.length() > 0) {
    summer = new Summariser(summariserName);
}

(2)初始化结果收集器

结果收集器的作用就是把把结果收集成摘要然后写到jtl日志文件,所以如果需要分析运行日志或者需要运行之后生成运行报告的话ResultCollector必不可少,如果不需要的话可以不添加

代码语言:javascript
复制
ResultCollector resultCollector = new ResultCollector(summer);

(3)设置jtl日志文件目录及文件名,并把该字符串设置到结果收集器中

代码语言:javascript
复制
String logFile = "d:\\tmp\\result.jtl";
resultCollector.setFilename(logFile);

(4)把结果收集器也添加到之前生成的hashtree中

代码语言:javascript
复制
jmxTree.add(jmxTree.getArray()[0], resultCollector);

| hashtree转换

这一步主要是对我们之前构建的HashTree进行转换,作用是使得原来的hashtree转换成jmeter可以运行执行的hashtree结构

代码语言:javascript
复制
JMeter.convertSubTree(jmxTree,false);

| 根据HashTree执行测试用例

这一步主要是通过设置我们转换后的HashTree,运行我们构建的测试用例。

代码语言:javascript
复制
StandardJMeterEngine engine = new StandardJMeterEngine();
engine.configure(jmxTree);
engine.run();

| 生成性能测试报告

这一步主要是构建报告生成器,通过前面结果收集器记录的摘要日志生成结果报告文件。

主要作用还是生成测试用例执行结果的报告文件。

首先指定报告生成目录;然后初始ReportGenerator,初始化的时候加载reportgenerator.properties配置信息到configuration里面并且创建jtl文件,generate根据jtl文件内容的信息来生成报告的内容,并且指定了报告生产样式等内容。

代码语言:javascript
复制
JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, "D:\\tmp\\report");
ReportGenerator generator = new ReportGenerator(logFile,null);
generator.generate();

| 总结

以上我们通过8个步骤介绍了如何使用jmeter提供的api来实现性能测试用例的执行,我们平台用例执行相关的代码都可以基于以上代码拓展,在文章最后我们贴下代码的整体部分

代码语言:javascript
复制
StandardJMeterEngine engine = new StandardJMeterEngine();
            // Initialize Properties, logging, locale, etc.
            JMeterUtils.loadJMeterProperties(jmeterPropertiesUri);
            JMeterUtils.setJMeterHome(jmeterHomeUri);
            JMeterUtils.initLogging();// you can comment this line out to see extra log messages of i.e. DEBUG level
            JMeterUtils.initLocale();
            // Initialize JMeter SaveService
            SaveService.loadProperties();
            //jmeter结果相关设置
            Summariser summer = null;
            String summariserName = JMeterUtils.getPropDefault("summariser.name", "summary");
            if (summariserName.length() > 0) {
                summer = new Summariser(summariserName);
            }
            String reportNameStr = new StringBuilder().append(performanceCase.getId()).append("_").append(performanceCase.getCaseName()).toString();
            StringBuilder htmlReportSb = new StringBuilder();
            htmlReportSb.append(jmeterReportJtlUri).append(reportNameStr);
            String htmlReportStr = htmlReportSb.toString();
            String logFile = htmlReportStr + ".jtl";
            CCTestResultCollector resultCollector = new CCTestResultCollector(summer);
            resultCollector.setFilename(logFile);
            File file = new File(performanceCase.getScriptUrl());
            log.info("fileExist:{}",file.exists());
            //加载本地jmx脚本
            HashTree jmxTree = SaveService.loadTree(file);
            jmxTree.add(jmxTree.getArray()[0], resultCollector);
            // jmeter5 以上建议换用 JMeter.convertSubTree(jmxTree,false);去掉没用的节点元素,替换掉可以替换的控制器
            JMeter.convertSubTree(jmxTree,false);
            engine.configure(jmxTree);
            engine.run();
            standardJMeterEngineMap.put(id, engine);

            //jmeter报告生成设置
            ReportGenerator generator = new ReportGenerator(logFile,null);
            JMeterUtils.setProperty(JMETER_REPORT_OUTPUT_DIR_PROPERTY, htmlReportStr);
            generator.generate();
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档