如何在测试重试失败后终止Nightwatch进程?GitLab CI场景求助
我完全懂你的困扰——在GitLab CI里跑Nightwatch时,要是某个测试套件重试3次还失败,还要硬等所有测试跑完才停,实在太浪费CI资源和时间。手动逐个启动测试套件又太繁琐,其实Nightwatch本身就有现成的选项能解决这个问题,不用折腾手动执行:
1. 用--fail-fast命令行参数(最直接的方案)
Nightwatch支持--fail-fast参数,它的作用就是:当任意测试用例(或套件,可配置)经过重试后仍然失败时,立刻停止执行后续所有测试。你只需要把它和重试参数结合起来,命令就变成:
nightwatch --retries=3 --fail-fast
如果需要更精准的控制——比如只在整个测试套件重试失败后才停止,而不是单个用例失败就停,可以在你的nightwatch.conf.js里配置failFast的级别:
module.exports = { test_settings: { default: { failFast: 'suite', // 可选值:true(任意失败就停)、'suite'(套件失败才停)、'testcase'(用例失败就停) retries: 3 } } }
之后直接运行nightwatch就行,不用在命令行重复加参数。
2. 旧版本Nightwatch:用stopOnFail配置
如果你用的是较旧版本的Nightwatch(v2之前),可能没有--fail-fast参数,这时候可以在配置文件里设置stopOnFail: true:
module.exports = { test_settings: { default: { stopOnFail: true, retries: 3 } } }
配置好后直接运行nightwatch,就能在测试失败(重试后)时立即终止任务。
3. GitLab CI脚本辅助优化(备选方案)
如果上面的Nightwatch自带选项不生效,也可以在GitLab CI的脚本里用shell命令增强控制,比如在脚本开头加上set -e,让shell在任何命令返回非0状态时立刻退出:
nightwatch_test: script: - set -e - nightwatch --retries=3
不过这个方案依赖Nightwatch本身在失败时返回非0退出码,优先推荐用Nightwatch自带的--fail-fast或配置项,更可靠。
这样一来,你既不用手动逐个启动测试套件,又能在测试重试失败后立刻终止CI任务,完美适配你的需求。
内容的提问来源于stack exchange,提问作者pcavalet

