(全文约2000字,阅读约需5分钟,首发于公众号:测试开发研习社,欢迎关注)
内容目录:
-
一、需求
-
二、思路
-
三、验证
-
四、实现
-
五、优化
-
六、彩蛋
篇幅较长,建议先收藏后阅读
一、需求
jmeter 根据使用场景,大概可以分为两种:
第一种是性能测试,报告内容侧重展示数据(响应速度、失败数量、中位数等)
第二种是接口测试,更关心用例失败的原因,报告内容应该侧重展示请求 / 响应详情、断言失败详情等
但是比较可惜的是,目前市面上大部分 jmeter 的测试报告都以性能测试为主,适合接口测试的不多,好看的更是少之又少。
于是在接口测试(而不是性能测试)场景下,
迫切需要一个好看、通用、能够展示用例失败原因的 HTML 测报告。
脑海中第一个想到的就是 allure,
本文将记录【让 JMeter 生成 Allure 测试报告】的思路、步骤、和成果
二、思路
allure 内置了一个插件,其描述为:
The plugin that adds support for results in JUnit.xml data format.
翻译过来大意是:
支持 JUnit.xml 格式的结果
我们在使用 pytest 生成 alluer 报告时,生成的结果文件是 json 格式的
从这个插件描述来看,json 不是唯一的选择,JUnit 的 xml 格式也被支持。
JUnit 作为一个非常非常老牌的测试框架,其影响力巨大。
与测试相关的各种不同类型、方向的工具或框架,
大都有意保持了对 JUnit 格式的兼容,比如 Jenkins、pytest、testlink 等
既然allure也支持Junit,
于是一个为【JMeter 生成 allure 报告】的思路逐渐清晰起来:
JMeter - > JUnitxml -> allure
三、验证
01.JMeter 生成 xml
默认情况下,JMeter 生成的结果是 csv 格式,可以改为 xml 格式内容如下
JMeter 生成 xml 格式结果内(双击放大)
虽然是 xml,却不是 JUnit 格式的 xml,所以后续还需要对其进行处理。
在花费功夫处理之前,先快速验证思路是否可行,免得撞南墙才发现路子根本不对,浪费时间和精力
02.pytest 生成 JUnitxml
这里,我们借助 pytest 快速生成一个【包含 JUnit.xml 文件的目录】
执行以下命令,启动 pytest 并生成 JUnitxml 格式报告到指定目录
pytest --JUnit-xml results/report.xml
pytest 生成 JUnitxml(双击放大)
JUnitxml 报告内容(双击放大)
至此,我们生成了符合 JUnitxml 要求的 xml 文件,并且存放在 results 目录下。
接下来试试allure能否正确处理
03.allure 处理 JUnitxml
根据前文,尝试执行 allure 命令
allure generate results
果然顺利生成了报告
alluer 根据 JUnitxml 生成 HTML 报告
好了,【借助 JUnitXML 为 JMeter 生成 Allure 报告】的思路正式通过验证!
接下来完善JMeter的处理,让整件事真正落地实现
四、实现
JMeter 默认生成的结果是 csv 格式,我们需要做的是:
-
以 XML 格式来生成
-
以 JUnit 的要求来生成
01.JMeter 生成 xml
可以通过修改文件来修改 JMeter 属性
JMeter 属性文件
将原文件中
# JMeter.save.saveservice.output_format=csv
修改为
JMeter.save.saveservice.output_format=xml
也可以在命令行参数中修改 JMeter 属性
JMeter -n -t HTTP_200_404.jmx -l result.xml -JJMeter.save.saveservice.output_format=xml -JJMeter.save.saveservice.response_data=True -JJMeter.save.saveservice.samplerData=True
02.JMeter.xml 转 JUnit.xml
XSLT 可扩展样式表语言转换(xEtensible Stylesheet Language Transformations)定义了如何从一个 XML 文档中提取、转换和呈现数据的格式。
可以将一个 XML 文档转换为其他格式,例如 HTML、XML 或 TXT。
JMeter 执行后生成的 xml 文件原始内容如下
JMeter 生成 xml
编写 xslt 文件如下
xslt 指定 xml 转换规则
使用 python 完成 xslt 转换
python 执行 xslt 规则
顺利生成 JUnit.xml!
xlst 生成的 JUnit.xml
03.allure 处理 JUnitxml
allure generate results
alluer 根据 JUnitxml 生成 HTML 报告
alluer 根据 JUnitxml 生成 HTML 报告
可以看到 allure 报告中增加了一组 Suites:httpSample,内容正是 JMeter 执行结果
不过,
在 JMeter 中【HTTP 404】的结果为失败,
在 allure 中却都显示为通过,
说明还有再优化的空间
五、优化
目前而言,我觉得有以下几个方面值得优化:
-
正确判断、显示用例状态是成功还是失败
-
在 allure 中显示失败的原因或细节
-
将执行 JMeter、生成 JUnitxml、生成 allure report 命令合三为一
-
使用纯 java 实现,不再依赖 python
01.修改 xslt 转换规则
优化后的 JUnit.xml 显示更丰富(双击放大)
JMeter 根据执行结果,在 allure 有 3 种状态:
-
passed:绿色,取样成功
-
broken:黄色,取样失败,可查看响应结果
-
Failed:红色,断言失败,可查断言详情
02.使用 java 执行 xslt 转换
创建 java 代码,代替 python 代码
java 执行 xslt 规则
执行方式
java XSLTProcessor JMeter.xml to_JUnit.xsl JUnit.xml
03.使用 ant 执行多个命令
Ant (Another Neat Tool) 一个用于自动构建和部署 Java 项目的构建工具,和 JMeter 同属于是 Apache 软件基金会。
在我看来,它相当于是一个跨平台的脚本,可以在 windows、linux、macOS 等不同的环境中,使用完全相同的方式(也就是 XML 文件)来编写脚本。
创建 Ant 构建工程如下
JMeter_to_allure 工程结构(双击放大)
把 JMeter 脚本放入 jmx
目录
然后回到 build.xml 旁边,
执行 ant
命令即可自动完成一系列动作
Ant执行结果(双击放大)
现在,可以到 out/report
目录中收获 HTML 报告啦!
优化后的 JUnit.xml 显示更丰富(双击放大)
大功告成!
为了给 JMeter 生成 allure 测试报告,前后多日查询了大量资料,
根据碎片信息探索出一个可行的方案,并不断调整最终落地成功,确实不易。
全过程已通过本文分享出来了,如果对你有帮助,还请点赞、分享。
对本文赞赏过的朋友记得加我微信,奉上优化后 Ant 构建工程文件,多多交流继续改进
六、彩蛋
01. 只要支持 JUnit 一切即可 Allure
本文实践证明:不论是哪款测试工具,只要能够生成 JUnitxml 格式的结果(比如 postman,unittest),都可以按此思路生成 allure 报告
任意测试工具 ->JUnit.xml -> Allure 测试报告
02. chatgpt 虽好,可不能盲目信任
03. allure 也可以在 Email 中查看了
allure 在版本 2.24.0 加入一个新的参数 --single-file
将报告生成为单个 HTML 文件,可作为附件发送到 Emial 中
allure generate results --single-file --clean
单文件HTML报告
手机下载后打开浏览效果如下(android chrome)
可以正常点击、滑动、切换、缩放等操作,查看内容没有问题
但是没有看到语言切换的按钮,只有英文内容
(全文完)
原创不易,喜欢请星标+点赞+在看,关注公众号《测试开发研习社》,不错过技术干货,谢谢鼓励!