此文章尚未发布,搜索引擎不可见。
视觉测试Shift-Right:为什么视觉测试不应止步于部署

视觉测试Shift-Right:为什么视觉测试不应止步于部署

视觉测试 Shift-Right:为什么视觉测试不应止步于部署

关键要点

  • Shift-right 意味着在生产环境中测试和监控,而不仅是部署前——生产环境中的视觉测试验证网站在真实条件下是否符合预期
  • 部署前测试(shift-left)不覆盖 CDN、A/B 测试、第三方内容、feature flags 和 CMS 更新这些无需新部署就能修改生产站点的因素
  • 生产中的 synthetic 视觉测试检测 CI 流水线无法模拟的因素引起的视觉退化
  • Shift-left 和 shift-right 不对立——它们互补,视觉测试是两者之间的纽带

视觉测试,根据 ISTQB 的定义,指的是*"通过将参考截图与应用当前状态对比,验证软件用户界面按预期视觉规范显示"*(ISTQB Glossary,Visual Testing)。

软件开发社区有一个根深蒂固的信念:测试发生在部署之前。您写单元测试、集成测试、端到端测试。在 CI 中运行。如果一切都绿,您部署。部署之后?您监控服务器指标、错误率、响应时间。但测试——真正的测试——已经完成。

这个信念是错误的。当涉及到您站点的视觉渲染时,它尤其危险。

为什么您的站点在没有部署的情况下会在生产中变化

第三方内容

您的站点可能集成第三方元素:广告脚本、聊天小部件、社交嵌入、YouTube 视频、Google Maps、cookie 弹窗。每个第三方供应商可以随时修改他们的代码而不警告,而那个代码在您的页面上运行。一个长 20 像素的聊天小部件可以在移动端隐藏关键操作按钮。

CMS 更新

如果您的站点使用 CMS,内容在生产中独立于技术部署而变化。一位发布过大图片文章的编辑。一位修改导航菜单的管理员。一位更改 CTA 文本使其对其容器太长的营销人员。

Feature flags 和 A/B 测试

Feature flags 和 A/B 测试按定义就是发生在生产中的变化。您的 CI 流水线测试基础版本。它不测试每个 feature flag 组合或每个 A/B 测试变体。

CDN 和缓存

您的 CDN 可以提供过时版本的 CSS 或图像。部署后未正确清除的缓存可以提供旧 CSS 配新 HTML,造成视觉不匹配。

证书和网络错误

过期的 SSL 证书可以将您的页面替换为浏览器警告。第三方服务中断可以在曾经有小部件的页面上留下空洞。

Shift-left 不够

Shift-left 运动是重大进步。但它依赖一个隐式假设:测试环境代表生产。您的 staging 不是您的生产。它使用精简数据集、sandbox 第三方服务、无 CDN(或不同的)、无真实用户。

部署前测试捕获一个时间点。在部署之间,您的生产站点是活的。内容变化、第三方演化、缓存过期、证书续订(或不)。部署前测试是冻结的照片。生产中的视觉测试是持续监视。

采用 shift-right 不意味着放弃 shift-left。两者是互补的。Shift-left 检测您代码中的回归。Shift-right 检测外部因素引起的退化。

生产中的 Synthetic 视觉测试

生产中的 synthetic 视觉测试分三步工作。首先,headless 浏览器以定期间隔加载您的生产页面。其次,它捕获截图。第三,截图与基线参考对比。如果检测到视觉差异,发送警报。

它检测什么

渐进退化: 小的第三方变化随时间积累。针对稳定基线的视觉测试检测这种漂移。

第三方事件: 字体提供商宕机,您的站点显示系统后备字体。视觉测试捕获可见结果。

发布错误: 编辑发布带破损格式或缺失图像的内容。视觉测试捕获绕过所有技术验证的编辑错误。

地理问题: 您的站点可能因地理位置而渲染不同,由于区域 CDN、本地化内容或当地法规(GDPR cookie 横幅)。

定义生产基线

固定基线: 在站点处于已验证状态时捕获,将所有后续捕获与之对比。检测任何偏差但需要在有意变更后更新。

滚动基线: 每个捕获与前一个对比。检测突然变化但可能错过渐进退化。

最佳策略结合两者:滚动基线用于突然变化,固定基线定期检查渐进漂移。

具体的 shift-right 视觉场景

周五晚部署。 您周五晚 6 点部署。CI 是绿的。周一早上,用户报告首页文本被截断。三天的退化。使用每四小时的视觉测试,问题在周五晚 10 点被检测到。

同意小部件更新。 您的 cookie 同意提供商部署小部件更新。小部件现在高 50 像素,将您的内容向下推。在移动端,"接受"按钮被部分隐藏。没有部署前测试能预料到这个。

Google Fonts 退役。 Google Fonts 移除或修改字体。您的站点回退到系统字体,所有页面布局变化。

图像 API 证书过期。 您的图像服务证书过期。浏览器阻止通过无效证书 HTTPS 提供的图像。您的页面显示破损图像图标。

实施 shift-right 视觉测试

从关键页面开始: 首页、落地页、转化页面、最常访问的产品页面。

定义捕获频率: 对大多数站点,每四小时是良好折衷。对关键页面(支付、注册),每小时。

配置警报: 连接到您现有的警报系统(Slack、PagerDuty、Opsgenie)。包括视觉 diff 以便立即评估严重性。

区分噪音和信号: 对频繁变化的元素(日期、访客计数器、广告)使用排除区域。从宽容的阈值开始,逐步收紧。

视觉测试作为 shift-left 和 shift-right 之间的桥梁

视觉测试可能是唯一在 shift-left 中和在 shift-right 中同样自然工作的测试类型。它使用相同的机制——捕获、对比、警报——无论上下文是 CI 还是生产。您的 CI 基线可以作为生产基线的起点。您解释视觉 diff 的专长直接转移。

结果是完整的视觉覆盖:您的代码在部署前被视觉验证(shift-left),您的站点在部署后被视觉监控(shift-right)。无盲点。

常见问题

生产中的视觉测试会产生很多误报吗?

这是合理的担忧但可管理。误报来自动态内容和小的渲染变化。使用排除区域和自适应阈值。配置良好的工具维持误报率在与 CI 相同的水平。

生产中的视觉测试和 uptime 监控有什么区别?

Uptime 监控检查您的站点响应(HTTP 200、可接受响应时间)。视觉测试检查您的站点看起来正确。站点可以"在线"而视觉上退化。

Shift-right 意味着我可以减少部署前测试吗?

不。Shift-right 补充 shift-left,不替代它。减少部署前测试将增加到达生产的回归。

当生产内容频繁变化时如何管理基线?

对频繁更新的站点,滚动基线策略最适合。对持续变化的元素,使用排除区域。目标是检测意外的视觉变化,不是冻结站点。

生产中的视觉测试符合 GDPR 吗?

Synthetic 视觉测试不收集用户数据。它运行 headless 浏览器作为匿名用户加载您的站点。截图捕获公共页面。如果测试已认证页面,使用带虚构数据的专用测试账户。

生产视觉测试应该多久运行?

取决于页面关键性、外部变化频率和检测时间容忍度。关键转化页面:每小时。重要内容页面:每四小时。次要页面:每天一到两次。


延伸阅读


您的站点在生产中变化,即使您什么都没部署。生产中的视觉测试检测您的 CI 看不到的退化。Delta-QA 监控您的页面,在渲染不再匹配您预期时警报您。

免费试用 Delta-QA →