此文章尚未发布,搜索引擎不可见。
不稳定的视觉测试(Flaky):为什么它们摧毁你的 QA 以及如何稳定它们

不稳定的视觉测试(Flaky):为什么它们摧毁你的 QA 以及如何稳定它们

不稳定的视觉测试(Flaky):为什么它们摧毁你的 QA 以及如何稳定它们

Flaky 测试(或不稳定测试)是指在相同代码和配置下产生不同结果——通过或失败——而被测系统未做任何修改的测试。

这里有一个可能让你不舒服的观点:一个 flaky 的视觉测试比没有测试更糟糕。缺失的测试日常不花费任何成本。它不阻塞你的 pipeline。不消耗团队时间。不破坏对测试基础设施的信心。Flaky 测试每天都在做这些事,而且是悄无声息地——因为每次假失败看起来都足够像真的,需要调查。

Google 关于自身测试系统的数据很说明问题:在任何时刻大约 1.5% 的测试是 flaky 的,但这些测试消耗了不成比例的工程时间。

为什么视觉测试特别容易不稳定

自动化视觉测试引入了单元测试或功能测试没有的非确定性层。网页的渲染是一系列复杂过程的结果,每个过程都引入自己的变异性。

Flaky 视觉测试的四个主要原因

时序:无法忽视的问题

Web 本质上是异步的。页面加载不是单一事件——而是事件级联。没有任何信号能保证视觉渲染已完成。

动画:静态媒介中的运动

截图是固定图像。动画是持续变化。两者对自动化比较来说根本不兼容。

动态内容:所有不受你控制的变化

日期、时间、广告、随机生成的头像——测试运行之间全部不同。

网络和基础设施:你无法控制的变量

测试运行在依赖外部资源的环境中。延迟因运行而异。

Flaky 测试的真实成本

最具破坏性的成本是信心丧失。当团队得知视觉测试"总是"无故失败时,他们会养成自动重新运行的条件反射。而 bug 就进入了生产环境。

有效的稳定化策略

控制渲染环境

在受控容器中使用 headless 浏览器,固定分辨率,预装字体,确定性网络配置。

中和动画

注入样式表,强制所有动画和过渡的持续时间为零。

稳定动态内容

固定日期和时间,禁用第三方小部件,mock API 数据。

智能等待

基于页面实际状态的等待策略,而非固定延迟。

采用能容忍噪音的比较方式

结构化方法——比较 DOM 和计算后的 CSS 属性——对渲染噪音最具抵抗力。

No-code 视觉测试作为维护问题的解决方案

No-code 工具如 Delta-QA 消除了脚本的脆弱层。你不写脚本——而是可视化地配置测试。

何时删除 flaky 测试

如果视觉测试在所有稳定化尝试后仍间歇性失败,最勇敢——也往往最明智——的决定是删除它。目标不是拥有最多的测试——而是拥有团队信任的测试。

常见问题

Flaky 测试和误报有什么区别?

误报信号一个不存在的问题。Flaky 测试在相同代码的不同运行之间产生不一致的结果。

如何测量 flakiness 率?

在不更改代码的情况下多次运行同一测试套件,统计结果在运行之间发生变化的测试。

No-code 视觉测试是否更少 flaky?

它们消除了一类 flakiness——与脚本相关的。但仍受浏览器渲染的相同约束。

应该自动重试失败的测试吗?

重试是创可贴,不是解决方案。如果启用,限制为一次重试并标记需要调查的测试。

CI/CD 中可接受的 flakiness 阈值是多少?

目标低于 1%。超过 5%,你的团队几乎肯定会养成系统性重新运行失败 pipeline 的习惯。

Delta-QA 能帮助稳定视觉测试吗?

Delta-QA 通过使用结构化方法从源头减少 flakiness。Sub-pixel rendering 变化、抗锯齿和时序问题原生被忽略。结合消除脆弱测试脚本的 no-code 方法,Delta-QA 无需复杂配置即可产生可靠且可重现的测试结果。


视觉测试只有在团队信任它时才有价值。 Flaky 测试日复一日地摧毁这种信任。

免费试用 Delta-QA →