Flaky 测试是指由于随机外部因素而在代码不变的情况下可能通过或失败的测试。它们削弱了对自动化测试的信任,并使 CI/CD 过程变得更加困难。
问题的历史: 随着大规模 E2E、集成和 UI 测试的出现,flaky 测试的问题开始显露,环境及依赖服务的稳定性无法保证。起初,这些故障常常被忽视,或者“手动重启”。
问题:
解决方案:
自动重试的示例代码:
import pytest @pytest.mark.flaky(reruns=3, reruns_delay=2) def test_random_fail(): ... # 测试代码
关键特性:
Flaky 测试总是基础设施的问题吗?
不是,flaky 测试可能由业务逻辑错误、代码竞态、异步行为或时间处理不当引起。
仅仅重启失败的测试是否足够?
不是,重试只是掩盖问题。需要查找并解决根本原因。
是否应该删除所有不稳定的测试?
不是,要暂时隔离它们并修复原因,而不是简单地永远排除。
在项目中,flaky 测试只是被标记并不再修改,认为这是一个“无法解决”的问题。
优点:
缺点:
对每个不稳定的测试引入了自动重试和内部的不稳定记录。定期进行共同审查原因,并在缺陷积累时进行修复。
优点:
缺点: