如何让JMeter也生成精美详细allure测试报告

(全文约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 格式,我们需要做的是:

  1. 以 XML 格式来生成

  2. 以 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 中却都显示为通过

说明还有再优化的空间

五、优化

目前而言,我觉得有以下几个方面值得优化:

  1. 正确判断、显示用例状态是成功还是失败

  2. 在 allure 中显示失败的原因或细节

  3. 将执行 JMeter、生成 JUnitxml、生成 allure report 命令合三为一

  4. 使用纯 java 实现,不再依赖 python

01.修改 xslt 转换规则

图片

优化后的 JUnit.xml 显示更丰富(双击放大)

JMeter 根据执行结果,在 allure 有 3 种状态:

  1. passed:绿色,取样成功

  2. broken:黄色,取样失败,可查看响应结果

  3. 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)

图片

可以正常点击、滑动、切换、缩放等操作,查看内容没有问题

但是没有看到语言切换的按钮,只有英文内容

(全文完)

原创不易,喜欢请星标+点赞+在看,关注公众号《测试开发研习社》,不错过技术干货,谢谢鼓励!

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值