zl程序教程

您现在的位置是:首页 >  其它

当前栏目

Cypress 里的 Flaky test 管理

管理 test Cypress
2023-09-14 09:03:56 时间

鼠标 hover 上去,看到提示信息:This test both passed and failed when retried within a run

何谓 Flaky test?Cypress 官网有如下定义:

当一个测试可以在多次重试尝试中通过和失败而没有任何代码更改时,它被认为是不稳定的。

例如,执行了一个测试并失败,然后再次执行该测试,代码没有任何更改,但这次它通过了。

当之前测试过的代码测试失败时,这是一个强烈的信号,表明代码出现了新的错误。 之前,测试通过,代码正确; 现在测试失败并且代码无法正常工作。 一个好的测试套件的目标是使这个信号尽可能清晰和定向。

然而,flaky 测试则不同。 flaky 测试是使用相同的代码显示通过和失败结果的测试。 鉴于此,测试失败可能意味着也可能不意味着存在新问题。 并尝试通过使用相同版本的代码重新运行测试来重现失败,可能会也可能不会导致测试通过。 我们开始认为这些测试不可靠,最终它们失去了价值。 如果根本原因是生产代码中的不确定性,则忽略测试意味着忽略生产错误。

一个统计数据供大家参考:

Google 在其持续集成系统上运行了大约 420 万个测试。 其中,大约 63,000 个在一周内出现了不稳定的运行。 虽然这占 Google 测试的不到 2%,但它仍然对 Google 工程师造成很大的拖累。

以上数据来自这篇博客

测试重试是使 Cypress Dashboard 能够检测不稳定测试的基本机制。 因此,需要启用测试重试才能利用 cypress 表板提供的任何不稳定的测试管理功能。

带有不稳定测试的测试运行将在仪表板“最新运行”页面中标有不稳定测试的数量。 Flaky 测试运行也可以通过此页面中的“Flaky”过滤器过滤进和过滤出。

如下图所示:

https://github.com/SAP/spartacus/pull/14401

点 view details,再选择某个具体的 cypress job 查看明细:

由测试重试触发的多次测试运行尝试中的任何失败都将导致给定的测试用例被标记为不稳定。

第一次尝试失败,第二次尝试成功:

关于 Spartacus 里 flaky test 的讨论

Protractor 是除了 Cypress 之外另一个 Angular 端到端测试框架:

对于 Spartacus UI 来说,页面的几乎每个部分都是动态创建的 (我们需要先进行后端调用)。

Protractor 底层是否调用 Selenium?

一篇如何用 Selenium 编写更稳定的测试的文章,值得一读。

更多Jerry的原创文章,尽在:“汪子熙”: