如何在Jenkins中获取Webdriverio测试的Allure报告统计数据
好问题!我来帮你拆解下Allure和Jenkins测试统计数据的几种可行方案:
关于Allure在Jenkins中暴露测试统计数据的核心结论
首先明确:Allure本身不会直接通过Jenkins REST API暴露像failedCount、passedCount这类结构化统计数据——它的核心定位是生成可视化的交互式报告,而非直接对接Jenkins原生的测试统计接口。所以你有两个主要方向可选:
方向一:修复Webdriverio+Mocha的JUnit报告器配置,让Jenkins识别XML结果
你提到本地能生成XML但Jenkins里找不到对应文件夹,大概率是报告路径配置或Jenkins工作区同步的问题。别担心,Mocha是完全支持JUnit报告器的(Webdriverio只是封装了Mocha,本身不会限制报告器类型),给你几个排查和修复的关键点:
- 确保在
wdio.conf.js里正确配置JUnit报告器,示例配置如下:reporters: [ 'spec', // 保留控制台输出的spec报告器 ['junit', { outputDir: './reports/junit', // 指定XML文件输出目录 outputFileFormat: (opts) => `test-results-${opts.cid}.xml` // 避免多进程下的文件覆盖 }] ] - 在Jenkins任务的构建后步骤中,添加「Publish JUnit test result report」,并设置测试报告XML的路径为
**/reports/junit/*.xml(路径要和你wdio配置里的outputDir完全对应)。 - 检查Jenkins工作区:构建完成后,直接进入任务的工作区查看
reports/junit文件夹是否存在。如果没有,可能是测试命令在Jenkins环境下没有正确执行报告生成逻辑,或者Jenkins运行用户没有写入该目录的权限。
方向二:直接从Allure的原始数据中提取统计信息
如果不想依赖JUnit报告器,也可以直接解析Allure生成的原始JSON数据来获取统计。Allure在生成可视化报告前,会在allure-results目录下生成一系列.json文件,这些文件包含了所有测试用例的状态细节。你可以这么做:
- 在Jenkins的post阶段添加一个自定义脚本(Node.js或Shell脚本都可以),遍历
allure-results下的JSON文件,统计passed、failed、skipped的用例数量。
给你一个简单的Node.js脚本示例:const fs = require('fs'); const path = require('path'); const resultsDir = './allure-results'; const stats = { passed: 0, failed: 0, skipped: 0 }; // 遍历所有JSON结果文件 fs.readdirSync(resultsDir).forEach(file => { if (file.endsWith('.json')) { const testData = JSON.parse(fs.readFileSync(path.join(resultsDir, file), 'utf8')); switch(testData.status) { case 'passed': stats.passed++; break; case 'failed': stats.failed++; break; case 'skipped': stats.skipped++; break; } } }); // 输出统计结果,也可以写入文件或存入Jenkins环境变量 console.log(`测试统计:通过${stats.passed} | 失败${stats.failed} | 跳过${stats.skipped}`); fs.writeFileSync('./test-stats.json', JSON.stringify(stats)); - 把提取到的统计数据存入Jenkins环境变量,或者写入一个自定义的JSON/CSV文件。后续你可以通过Jenkins API读取这个文件的内容,实现和JUnit类似的统计数据获取效果。
额外小技巧:利用Allure命令行工具生成汇总数据
Allure的命令行工具可以帮你快速生成统计汇总:执行allure generate --report-dir allure-report --clean生成报告后,在allure-report/data目录下会有summary.json文件,这个文件里直接包含了所有测试的统计总数,你可以直接解析这个文件拿到所需数据,不用自己遍历单个用例文件。
内容的提问来源于stack exchange,提问作者Joseph




