你如何防止测试在第一个失败的测试用例上停止?

Posted

技术标签:

【中文标题】你如何防止测试在第一个失败的测试用例上停止?【英文标题】:How do you prevent the tests from stopping on the first failed test case? 【发布时间】:2019-03-07 22:39:33 【问题描述】:

我正在尝试检查某些内容是否存在于不同的页面上。例如:

const contentCount = Selector('.some-element').childElementCount

.expect(contentCount).gte(1, 'The related content is missing.')

... 工作正常,除了在第一个断言失败后测试停止。这并不理想,因为我正在尝试生成一个同时显示所有失败断言的报告。

在断言失败后如何让测试继续运行?

【问题讨论】:

【参考方案1】:

首先从主题回答您的问题(如何防止测试在第一个失败的测试用例上停止)。

TestCafe 将运行所有测试,即使其中一项测试失败。您可能希望将具有多个断言的单个测试用例拆分为多个测试用例,每个测试使用一个断言以获得正确的报告。

现在,从正文回答您的问题(如何在断言失败后继续运行)。

目前,在测试执行期间无法跳过失败的断言。如果断言失败,TestCafe 认为出现问题,因此整个测试失败。但是,如果您不希望某个断言未能通过测试,您可以为其添加一个条件;例如:

if (contentCount > 0)
  await t.expect(contentCount).gte(1, 'The related content is missing.')

但是,这看起来不像是直接且可预测的测试逻辑。因此,我会选择将一个测试拆分为多个测试,每个测试一个断言。

另请参阅:TestCafe Assertions

【讨论】:

感谢您的回复。无需过多介绍我们的设置,在单个测试中保留多个断言将是理想的。我不确定这是否已经被请求 - 但是如果我们可以选择继续(相同的)测试,即使断言失败也会很好。 runner.run() 上的附加选项可能吗? 对我来说,任何测试的主要目的都是检查某些功能是否正常工作。但是,如果出现问题,则意味着此功能无法完全发挥作用。在这种情况下,我希望测试失败。想象一下,您的汽车有一个 V6 发动机,但 6 个火花塞中有 1 个不工作。这是一个必须解决的问题,如果至少有一个火花塞发生故障,我希望我的火花塞检查测试失败。 作为替代方案,您可以一次在测试中为所有条件创建单个断言并提供完整的实际结果。在这种情况下,您可能会看到预期结果和实际结果之间的差异。 有道理。也许我的测试用例范围在本质上太宽泛了,应该缩小范围以更细化。感谢您的帮助,并继续努力! TestCafe 是一个了不起的工具。

以上是关于你如何防止测试在第一个失败的测试用例上停止?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Cakephp 的 Controller 第二个测试用例总是失败

如果第二次测试失败,cypress 将停止执行,但我需要继续运行其他测试?在赛普拉斯

如果机器人框架中的第一个测试用例失败,如何跳过测试用例执行

用于失败测试用例的 J Meter 电子邮件配置

JUnit 测试用例中“失败”的实际用途是啥?

Robotframework:在第二个测试用例中找不到套件变量