Azure DevOps中5个作业并行运行时如何获取合并Cucumber报告
针对5个分散在不同Agent运行的RT作业生成独立Cucumber报告、需要合并为统一HTML报告的需求,按以下步骤落地即可:
统一所有测试作业的原始报告输出规则
每个RT执行作业不要只生成单份HTML报告,必须同步输出标准格式的Cucumber JSON执行结果文件——这是跨作业合并报告的核心基础,没有原始JSON没法精准合并用例状态、执行步骤、附件关联信息。
每个作业的JSON报告可以按作业标识命名,比如cucumber-run-1.json到cucumber-run-5.json,统一存到作业目录下的raw-cucumber-json文件夹。作业执行末尾加发布流水线产物步骤,把这个文件夹作为专属产物上传,产物名带上作业标识做区分,比如raw-report-$(Job.Id),确保作业运行结束后,原始结果能被流水线其他环节访问到。如果报告里包含失败截图、执行日志这类附件,要把附件文件夹和JSON文件一起打包上传。新增专用的报告合并作业
在流水线中新增一个独立作业专门处理报告合并,配置该作业的依赖项为前面全部5个RT执行作业,同时设置作业运行条件为「即使上游作业失败、部分通过也触发运行」——避免某几个测试作业跑挂就直接跳过报告生成,导致看不到失败用例详情。
该作业启动后第一步先执行产物下载逻辑,把5个RT作业上传的所有原始JSON报告、附件全部下载到当前作业工作目录的all-raw-data文件夹下,先做文件完整性校验,确认5份JSON都存在再走后续流程。执行合并逻辑生成统一HTML报告
合并逻辑分两步走,不用做复杂的二次开发:- 合并原始JSON:标准Cucumber JSON本身是数组结构,每个数组元素对应一个Feature的全量执行结果,只需要把5份JSON里的数组元素全部提取、拼接到同一个JSON数组中,生成
merged-cucumber.json即可。如果不想自己写脚本处理,直接用现成的轻量工具就行,比如装个Node版的合并工具,执行命令:# 安装轻量合并与报告生成工具 npm install -g cucumber-json-merge cucumber-html-reporter # 合并所有零散JSON为总文件 cucumber-json-merge ./all-raw-data/*.json > ./merged-output/merged-cucumber.json - 渲染统一HTML:基于合并后的总JSON文件,调用HTML生成工具渲染最终报告,可以自定义报告主题、标题、元信息(比如执行批次、总耗时、环境标识),示例命令:
cucumber-html-reporter \ --theme bootstrap \ --jsonFile ./merged-output/merged-cucumber.json \ --output ./merged-output/final-cucumber-report.html \ --storeScreenshots true \ --screenshotsDirectory ./all-raw-data/screenshots
如果团队是Java技术栈,也可以直接用Cucumber官方的reporting jar包执行同样的合并、渲染逻辑,核心流程完全一致。
- 合并原始JSON:标准Cucumber JSON本身是数组结构,每个数组元素对应一个Feature的全量执行结果,只需要把5份JSON里的数组元素全部提取、拼接到同一个JSON数组中,生成
发布最终报告
报告生成完成后做两个配置:- 把整个
merged-output文件夹作为流水线正式产物发布,命名为「合并版Cucumber测试报告」,所有有流水线访问权限的人员都可以直接下载查看完整HTML - 调用Azure DevOps自带的测试结果发布命令,把合并后的JSON结果转换为平台原生识别的测试用例格式,发布到流水线的「测试」标签页,不用下载HTML就能直接在平台内查看所有用例的通过/失败/跳过状态、执行日志。
- 把整个
踩坑提示:
- 所有作业输出的Cucumber JSON必须符合官方标准结构,不要自定义修改字段,不然合并时会出现用例丢失、状态错乱的问题
- 附件、截图的相对路径在合并时要保持和原始JSON里记录的路径一致,不然生成的HTML里会出现图片、日志加载失败的问题
- 不要尝试直接合并5份独立的HTML文件,这种方式生成的报告会丢失样式、交互能力,用例统计数据也会出错,必须从原始JSON层做合并。
内容的提问来源于stack exchange,提问作者Sanya Sood

