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

如何生成排除失败测试用例的Cypress JUnit报告?

解决Cypress JUnit报告排除失败用例的方法

要在Cypress生成的JUnit XML报告中排除失败用例,你可以通过后处理报告文件的方式实现,以下是两种可行方案:

方案一:通过Cypress节点事件自动处理报告

利用Cypress的after:run事件,在测试完成后自动解析并过滤JUnit报告中的失败用例:

  1. 首先安装XML解析工具xml2js:
npm install xml2js --save-dev
  1. 修改cypress.config.js,添加报告处理逻辑:
const { defineConfig } = require('cypress');
const xml2js = require('xml2js');
const fs = require('fs');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on('after:run', async () => {
        const reportPath = './cypress/reports/junit/results.xml'; // 替换为你的报告实际路径
        if (!fs.existsSync(reportPath)) return;

        // 读取并解析XML报告
        const xmlContent = fs.readFileSync(reportPath, 'utf8');
        const parsedXml = await xml2js.parseStringPromise(xmlContent);

        // 过滤掉所有包含failure节点的测试用例
        parsedXml.testsuites.testsuite = parsedXml.testsuites.testsuite.map(suite => {
          if (suite.testcase) {
            suite.testcase = suite.testcase.filter(testcase => !testcase.failure);
          }
          // 更新测试套件的统计数据(可选,保持报告数据准确)
          if (suite.$) {
            suite.$.tests = suite.testcase?.length || 0;
            suite.$.failures = 0;
            suite.$.errors = 0;
          }
          return suite;
        });

        // 重新生成XML并覆盖原报告
        const builder = new xml2js.Builder();
        const updatedXml = builder.buildObject(parsedXml);
        fs.writeFileSync(reportPath, updatedXml);
      });
    },
  },
});

方案二:独立脚本处理报告

如果不想修改Cypress配置,可以写一个独立的Node脚本,在测试完成后手动或通过npm脚本执行:

  1. 创建filter-junit-report.js文件:
const xml2js = require('xml2js');
const fs = require('fs');

async function filterFailedTests() {
  const reportPath = './cypress/reports/junit/results.xml'; // 你的报告路径
  if (!fs.existsSync(reportPath)) {
    console.log('报告文件不存在');
    return;
  }

  const xmlContent = fs.readFileSync(reportPath, 'utf8');
  const parsedXml = await xml2js.parseStringPromise(xmlContent);

  // 过滤失败用例逻辑同方案一
  parsedXml.testsuites.testsuite = parsedXml.testsuites.testsuite.map(suite => {
    if (suite.testcase) {
      suite.testcase = suite.testcase.filter(testcase => !testcase.failure);
    }
    if (suite.$) {
      suite.$.tests = suite.testcase?.length || 0;
      suite.$.failures = 0;
      suite.$.errors = 0;
    }
    return suite;
  });

  const builder = new xml2js.Builder();
  const updatedXml = builder.buildObject(parsedXml);
  fs.writeFileSync(reportPath, updatedXml);
  console.log('已完成失败用例过滤');
}

filterFailedTests();
  1. 在package.json中添加执行脚本:
{
  "scripts": {
    "test": "cypress run",
    "posttest": "node filter-junit-report.js"
  }
}

这样每次执行npm run test后,会自动触发脚本过滤报告。

注意事项

  • 确保替换代码中的报告路径为你实际的JUnit报告生成路径(通常由cypress-junit-reporter的配置决定)
  • 过滤后建议更新测试套件的统计字段(如tests、failures),避免报告数据与实际内容不一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 16:36:20