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

Cypress搭配Mochawesome如何实现高层级测试聚合统计图表展示

Cypress 9.7 + Mochawesome 多层级聚合环形统计实现方案

Mochawesome 默认仅对it用例的直接父级describe块渲染环形统计图表,你当前用例结构中C层用例的直接父级是B层describe,因此默认只有B层展示图表。以下是无侵入修改源码、适配现有结构的可落地方案:

自定义Reporter注入聚合统计逻辑

不需要修改node_modules内的原有文件,通过继承原生Mochawesome reporter实现各层级测试结果的递归统计:

  • 在项目根目录新建custom-mochawesome-reporter.js,写入以下逻辑:
const Mochawesome = require('mochawesome');

class CustomMochawesomeReporter extends Mochawesome {
  constructor(runner, options) {
    super(runner, options);

    runner.on('end', () => {
      // 递归统计当前suite及所有子suite的用例结果
      const calcAggregateStats = (suite) => {
        const stats = {
          passes: 0,
          failures: 0,
          pending: 0,
          skipped: 0,
          total: 0
        };

        // 统计当前suite直接挂载的用例
        suite.tests.forEach(test => {
          stats.total++;
          if (test.state === 'passed') stats.passes++;
          else if (test.state === 'failed') stats.failures++;
          else if (test.pending) stats.pending++;
          else stats.skipped++;
        });

        // 累加所有子suite的统计结果
        suite.suites.forEach(childSuite => {
          const childStats = calcAggregateStats(childSuite);
          Object.keys(stats).forEach(key => {
            stats[key] += childStats[key];
          });
        });

        // 将聚合结果挂载到suite节点,供渲染时读取
        suite.aggregateStats = stats;
        return stats;
      };

      // 从根测试节点开始全量统计,自动覆盖顶层、A层、B层所有块
      calcAggregateStats(this.runner.suite);
    });
  }
}

module.exports = CustomMochawesomeReporter;
  • 修改cypress.json配置,替换默认reporter为自定义版本,先关闭单文件html生成,方便后续多spec结果合并:
{
  "reporter": "./custom-mochawesome-reporter.js",
  "reporterOptions": {
    "reportDir": "cypress/reports/mocha",
    "overwrite": false,
    "html": false,
    "json": true
  }
}

合并多Spec测试结果

Cypress 运行多个spec文件时会为每个文件单独生成一份json报告,执行以下命令合并为单份全局报告数据:

npx mochawesome-merge cypress/reports/mocha/*.json > cypress/reports/merged-report.json

调整报告模板渲染多层级图表

  • 把Mochawesome默认模板从node_modules/mochawesome-report-generator/src/templates目录完整复制到项目内的custom-report-template目录,避免修改原始依赖文件。
  • 做两处模板修改即可实现需求:
    • 找到负责渲染describe块的模板片段,将原有环形图的数据源从「当前suite直接子用例统计」替换为我们之前挂载的aggregateStats,只要是带子块的suite(包括A层)都会自动渲染聚合环形图。由于你每个B层块下只有1个用例,B层的聚合结果和原有默认统计值完全一致,不会出现数据偏差。
    • 找到报告顶部的全局概览区域,新增同款环形图组件,数据源取根节点的aggregateStats,即可实现顶层全局聚合图表展示。
  • 执行命令基于合并后的json和自定义模板生成最终html报告:
npx marge cypress/reports/merged-report.json --reportDir cypress/reports/final --templateDir ./custom-report-template

轻量替代方案

如果不想修改模板,可以写一个简单的node脚本,在合并完json报告后递归遍历所有suite节点,把节点原生的stats字段直接替换为递归计算的聚合统计值,再用Mochawesome默认模板生成报告即可。这种方式不需要调整模板代码,默认渲染逻辑就会自动给所有层级的suite块、顶层概览渲染对应聚合环形图。


内容的提问来源于stack exchange,提问作者Steve H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:03:31