
Cucumber 支持通过 retry 选项对失败的场景(Scenario)进行即时重试,无需手动维护 rerun.txt,适用于因临时性环境问题(如网络抖动、服务瞬时不可用)导致的偶发失败。
cucumber 支持通过 `retry` 选项对失败的场景(scenario)进行即时重试,无需手动维护 rerun.txt,适用于因临时性环境问题(如网络抖动、服务瞬时不可用)导致的偶发失败。
在 Cucumber-JVM(Java)或 Cucumber-JavaScript(如 Cucumber.js)中,retry 是官方支持的内置机制,用于在单次测试执行过程中自动重试失败的场景,而非延迟到后续批次执行。该机制特别契合 Jochen 所述场景:当系统存在短暂不稳定(例如第三方 API 偶发超时),且问题可在毫秒级恢复时,立即重试比生成 rerun 文件再执行更高效、更可控。
✅ 正确配置方式(以 Cucumber.js 为例):
在 cucumber.conf.js 或 CLI 参数中设置:
module.exports = {
default: {
formatOptions: {
snippetSyntax: '@cucumber/cucumber/snippets',
},
// ✅ 关键配置:每个失败场景最多重试 2 次(即共执行 3 次)
retry: 2,
// 可选:若需对整个 spec 文件粒度重试(如文件内任一场景失败则重跑全文件),使用:
// specFileRetries: 1,
}
};
或通过命令行启用:
npx cucumber-js --retry 2
⚠️ 重要注意事项:
-
retry仅对 Scenario 级别失败生效(不适用于 Before/After Hook 失败,除非失败发生在 Scenario 执行期间); - 重试时,整个 Scenario 会完整重新执行(包括所有
Given/When/Then步骤及关联的 Hook),因此请确保步骤具备幂等性(例如清理资源、使用唯一测试数据); - Cucumber 不提供“在 Step Definition 内主动触发重试”的 API(如
retryCurrentScenario()),因此无法在@After或步骤中动态决定是否重试——重试策略必须预先声明; - 若需更精细控制(如仅对特定错误码重试),建议结合自定义异常 +
retry配合@Before中的重试计数器模拟,但会增加复杂度,通常不推荐替代原生retry。
? 总结:
对于临时性故障场景,优先使用 retry: N(推荐 N=1 或 2),它简洁、可靠、开箱即用;rerun.txt 方案更适合调试阶段或需人工介入分析失败原因的场景。无需自行实现重试逻辑——Cucumber 已为你内置了这一关键能力。











