返回视觉测试手册
React
章节
  • 引言
  • 组件浏览器
  • 工作流程
  • 视觉TDD
  • 自动化
  • 结论

视觉测试简介

测试用户界面的务实方法

用户界面是主观的。对于“这个看起来对吗?”这个问题的答案取决于你的浏览器、设备和个人喜好。你仍然需要查看渲染出的UI来验证其外观。

但是每次提交时手动检查整个UI需要花费很长时间。单元测试和快照测试等不同方法试图自动化视觉验证。它们常常以失败告终,因为机器无法从HTML标签和CSS类的序列中确定UI的正确性。

团队如何防止视觉bug?微软、BBC和Shopify等公司使用什么技术将UI交付给数百万人?我和合著者Tom研究了顶尖团队,以找出真正有效的方法。

本手册介绍了视觉测试,这是一种务实的方法,它结合了人眼的准确性和机器的效率。视觉测试并非将人从测试过程中剔除,而是使用工具将他们的精力集中在需要注意的特定UI变化上。

Visual testing driven path

单元测试没有眼睛

要理解视觉测试,从单元测试开始是有意义的。现代UI是组件驱动的——它们由模块化的部分组成。组件结构允许你将UI渲染为props和state的函数。这意味着你可以像测试任何其他函数一样单元测试组件。

单元测试隔离一个模块,然后验证其行为。它提供输入(props、state等)并将输出与预期结果进行比较。单元测试之所以受欢迎,是因为隔离测试模块更容易覆盖边缘情况并准确定位故障来源。

核心问题是,UI的大部分固有复杂性是视觉上的——生成的HTML和CSS如何在用户屏幕上渲染的具体细节。

单元测试非常适合评估具体输出:2 + 2 === 4。但它们对UI不太好用,因为很难辨别HTML或CSS的哪些细节如何影响外观。例如,HTML更改并不总是影响UI的外观和感受。

快照测试呢?

快照测试提供了另一种验证UI外观的方法。它们渲染组件,然后将生成的DOM捕获为“基线”。随后的更改将新的DOM与基线进行比较。如果存在差异,开发者必须明确更新基线。

Minified component code

实践中,DOM快照很笨拙,因为通过评估HTML块很难确定UI是如何渲染的。

快照测试与其他自动化UI测试一样存在脆弱性。组件内部工作的任何更改都需要更新测试,无论组件的渲染输出是否发生变化。

视觉测试专为UI而生

视觉测试旨在捕获UI外观的变化。你可以使用像Storybook这样的组件浏览器来隔离UI组件,模拟它们的变体,并将支持的测试用例保存为“stories”。

在开发过程中,通过在浏览器中渲染组件来快速手动验证其外观。通过切换组件浏览器中列出的每个测试用例来确认组件的变体。

在QA阶段,使用自动化来检测回归并强制执行UI一致性。像Chromatic这样的工具会在一致的浏览器环境中,捕获每个测试用例的图像快照,包括标记、样式和其他资源。

每次提交时,新的图像快照会自动与先前接受的基线快照进行比较。当机器检测到视觉差异时,会通知开发者批准有意更改或修复意外错误。

这听起来工作量很大...

这听起来可能很费力,但最终比筛选自动化测试中的误报、更新测试用例以匹配细微的UI更改以及加班使测试再次通过要容易得多。

了解工具

现在我们对视觉测试有了一定的了解,接下来看看启用它所需的主要工具:组件浏览器。在下一章中,我们将看到组件浏览器如何帮助开发者构建和测试组件。

这篇免费指南对你有帮助吗?发推文赞赏并帮助其他开发者找到它。
下一章
组件浏览器
用于UI开发和视觉测试的工具
✍️ 在 GitHub 上编辑 – 欢迎提交 PR!
加入社区
6,975开发者(数量持续增长)
缘何缘何选择 Storybook组件驱动的 UI
开源软件
Storybook - Storybook 中文

特别鸣谢 Netlify CircleCI