WebdriverIO项目Allure报告如何改为统计测试场景通过率替代测试步骤通过率
WebdriverIO Allure报告按测试场景统计通过率修改方案
核心逻辑调整
原逻辑为步骤级统计:每检测到一个失败步骤就累加失败计数,最终通过率为「成功步骤数/总步骤数」。
要实现场景级统计,需要改为按场景聚合判断:每个测试场景只要存在任意一个失败步骤,即标记为整个场景失败,最终通过率为「成功场景数/总场景数」。
方案1:直接修改现有统计逻辑
在原有步骤遍历逻辑的基础上,新增场景维度的去重判断,避免同一场景的多个失败步骤重复计数:
// 新增统计变量 const failedScenarioIds = new Set(); // 存储已标记失败的场景唯一ID,自动去重 let totalScenarios = 0; // 总场景数 // 遍历每个测试场景时先累加总场景数,同时记录当前场景的唯一标识 totalScenarios++; const currentScenarioId = scenario.id; // 替换为你实际能获取到的场景唯一ID变量 // 原步骤遍历逻辑修改为:只要场景有一个步骤失败,就标记场景失败 const stepResults = scenario.steps; // 替换为你实际获取当前场景步骤列表的变量 stepResults.forEach(stepResult => { const isSteppassed = stepResult.getStatus(); if (isSteppassed != 'passed') { failedScenarioIds.add(currentScenarioId); } }) // 最终通过率计算 const passedScenarios = totalScenarios - failedScenarioIds.size; const passRate = (passedScenarios / totalScenarios) * 100;
你举的示例中总场景数为2,失败场景集合大小为1,计算得到通过率为50%,符合需求。
方案2:使用WebdriverIO钩子直接统计(更简便)
WebdriverIO的afterTest钩子会在每个测试场景执行完成后触发,直接返回整个场景的执行结果,无需自行遍历步骤判断,配置更简单:
在wdio.conf.js配置文件中添加如下代码:
// 全局统计变量 let totalScenarios = 0; let failedScenarios = 0; exports.config = { // 其他原有配置保留 afterTest(test, context, { passed }) { // 每个场景执行完成触发一次,累加总场景数 totalScenarios++; // passed参数直接返回整个场景是否全部步骤执行成功 if (!passed) { failedScenarios++; } }, // 你可以在报告生成前的钩子中拿到最终通过率 onComplete() { const passRate = ((totalScenarios - failedScenarios) / totalScenarios * 100).toFixed(2); console.log(`测试场景通过率:${passRate}%`); // 你可以将该值写入Allure报告的自定义统计字段中 } }
内容的提问来源于stack exchange,提问作者rohini dingankar
相关产品推荐
相关产品推荐

