You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:54:04