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

Cypress是否支持失败重试阈值功能?

Cypress失败阈值终止重试的实现方案

Cypress本身并没有内置基于失败率阈值自动终止测试/重试的原生功能,但可以通过自定义逻辑实现类似的失败熔断效果,避免在大规模失败时浪费时间。

实现方式1:通过测试钩子统计并终止

在全局测试文件(如cypress/support/e2e.js)中维护失败计数,结合afterEach钩子判断失败率,达到阈值时终止测试运行:

// 全局统计变量
let totalTests = 0;
let failedTests = 0;
const FAILURE_THRESHOLD = 0.3; // 30%失败率阈值

// 先统计总测试用例数
before(() => {
  totalTests = Cypress.spec.tests.length;
});

afterEach(function() {
  // 判断当前测试是否失败
  if (this.currentTest.state === 'failed') {
    failedTests++;
  }

  // 计算失败率,超过阈值则终止
  const failureRate = failedTests / totalTests;
  if (failureRate >= FAILURE_THRESHOLD) {
    cy.log(`失败率已达${(failureRate * 100).toFixed(0)}%,终止测试运行`);
    Cypress.runner.stop();
  }
});

实现方式2:通过插件监听测试事件

在Cypress插件文件(cypress/plugins/index.js)中监听测试完成事件,统计失败数并触发进程退出:

module.exports = (on, config) => {
  let totalTests = 0;
  let failedTests = 0;
  const FAILURE_THRESHOLD = 0.3;

  // 监听测试开始事件,获取总用例数
  on('run:start', (details) => {
    totalTests = details.totalTests;
  });

  // 监听单个测试完成事件
  on('test:after:run', (test) => {
    if (test.state === 'failed') {
      failedTests++;
    }

    const failureRate = failedTests / totalTests;
    if (failureRate >= FAILURE_THRESHOLD) {
      console.log(`失败率已达${(failureRate * 100).toFixed(0)}%,强制终止测试`);
      process.exit(1); // 直接退出进程
    }
  });

  return config;
};

注意事项

  • 两种方式的核心都是统计失败率并触发终止,前者在测试层面停止,后者直接终止进程,可根据需求选择。
  • 如果需要针对重试后的失败计数,可在统计时过滤掉重试的测试(通过test.attempts字段判断是否是重试实例)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:28:19