首页 > 解决方案 > 赛普拉斯:在第一次失败时中断所有测试

问题描述

如何在第一次测试失败时中断所有赛普拉斯测试?

我们正在使用 semaphore 为每个 PR 使用 Cypress 启动完整的 e2e 测试。但这需要太多时间。

我想在第一次测试失败时中断所有测试。

获取完整的错误是每个开发人员在开发时的业务。如果在部署之前有任何问题,我只想尽快得到通知,而不必等待完整的测试完成。

到目前为止,我想出的唯一解决方案是使用 Cypress 中断对当前规范文件的测试。

afterEach(() => {
        if (this.currentTest.state === 'failed') {
            Cypress.runner.end();
        }
    });

但这还不够,因为它只会中断位于规范文件中的测试,而不是所有其他文件。我今天对这个问题做了一些深入的搜索,这似乎不是赛普拉斯的事情。

所以我正在尝试其他解决方案。

1:带信号量

fail_fast:
  stop:
    when: "true"

它应该在错误时中断脚本。但它不起作用:测试在出错后继续运行。我的猜测是赛普拉斯只有在所有测试都完成后才会抛出错误。

2:也许是脚本启动赛普拉斯,但我没有想法现在这里是我的脚本

"cy:run": "npx cypress run",
"cy:run:dev": "CYPRESS_env=dev npx cypress run",
"cy:test": "start-server-and-test start http-get://localhost:4202 cy:run"

标签: semaphorecypresse2e-testing

解决方案


编辑:似乎引入了此功能,但它需要赛普拉斯的付费版本(商业计划)。有关它的更多信息:Docs在线程中发表评论


原答案:

由于某种原因,这一直是赛普拉斯长期要求的功能,但仍未引入。社区提出了一些解决方法,但不能保证它们会起作用。在 Cypress 的 Github 上查看此线程以获取更多详细信息,也许您会找到适合您的情况的解决方法。


推荐阅读