设想你把 CI 标准化到人人都会列入候选名单的三款开源视觉回归测试工具之一(BackstopJS、Argos、Lost Pixel),却在调研开始一周后发现,三者中有两者并非从外面看上去的样子。Argos 在 GitHub 上有出色的代码,但其维护者直言,自托管既不受支持也没有文档。Lost Pixel 在团队加入 Figma 时于 2026 年 4 月 22 日被归档,也没有为已经在用它的团队留下任何迁移路径。
这就只剩下三者中恰好一个,如今真正可自托管且有人维护。对于一个看似有这么多选择的类别来说,这么讲很奇怪,但局面实际就是如此。人们当作三个对等选项对待的工具,实际上是一个能用的自托管选项、一个运行在别人服务器上的强大工具,以及一个你应当迁移离开的。
这是一篇以自托管为先的解读,讲的是那些能在与现实的碰撞中幸存下来的自托管视觉回归测试工具:哪一个适合哪种约束,以及如果你此刻正在用 Lost Pixel 该怎么办。
简短版本
- BackstopJS 是可自托管、有维护、采用 MIT 许可且零成本的选项。默认使用 Puppeteer 并支持 Playwright,通过 Resemble.js 做像素比对,还有一个 HTML 评审界面(附带你需要提前规划的 Docker 渲染注意事项)。
- Argos 在工作流方面是更强的工具(PR 评审,以及自 2025 年末起的 ARIA 快照比对),但实际上是一项托管式 SaaS。维护者并不为你自行运行它提供支持或文档。
- Lost Pixel 已于 2026 年 4 月被归档。不要为新工作采用它,如果你在用,现在就规划迁移。
一句话结论:对于完全自托管的 CI 流水线,BackstopJS 是务实之选。如果你想要最好的评审工作流并且能接受对 SaaS 的依赖,Argos 是更好的工具。
(本文不涉及的内容:基于 Cypress 的视觉测试、Storybook 专属的组件工作流,以及亲手测得的性能数字。这份对比建立在一手来源的事实之上,而非我自己跑过的测试台。)
自托管视觉回归测试的格局变了
过去一年里的两件具体事件重塑了这份候选名单,而如果你依据的是它们发生之前写成的清单式文章,二者都很容易被漏掉。
第一件:在 2025 年 9 月的一场 GitHub 讨论中,一位 Argos 维护者表示,Argos 不为在托管服务之外运行它提供任何支持或文档。代码采用 MIT 许可且公开摆着,所以“你可以自托管它”在技术上没错,但并不存在受支持的路径——一旦你成了为它值班的人,这个区别就变得极其重要。
第二件: Lost Pixel 仓库被归档 是在 2026 年 4 月 22 日,设为只读,当时团队宣布他们 加入 Figma。这次停摆没有附带任何迁移指南。一款直到不久前还是 Percy 和 Chromatic 之正当免费自托管替代品的工具,如今成了一个无人维护的依赖。
两项变化指向同一个方向。团队一开始会走到这里的原因——随浏览器乘视口乘页面而膨胀的 SaaS 定价,或是禁止把未发布 UI 的截图上传给第三方的合规规则——并没有消失。变的是,自托管的菜单比看上去更短。
本节要点:人们列入候选名单的三款工具中,如今真正可自托管且被积极维护的只有一款。

BackstopJS:真正可自托管的选项
安装就是 npm install -g backstopjs (或在项目里做本地安装),而这一个事实就解释了 BackstopJS 为何在自托管这条轴上取胜的大部分原因:没有需要逆向工程的服务,没有它偷偷依赖的托管后端。它在你掌控的基础设施上,以 MIT 许可、零许可成本,作为一个 npm 包或一个 Docker 容器运行。 README 指出,当前的版本线(6.3.x)支持 Node 20。
在底层,它默认驱动 Puppeteer(无头 Chrome),也在 chromium、firefox 和 webkit 上支持 Playwright。比对是通过 Resemble.js 做的像素级比对,带有一个可配置的值 misMatchThreshold ,用来控制多大的像素偏差才算作失败。批准通过一个带有浏览器内界面的 HTML 报告完成,用于接受变更。
局限之处正是做出战略决策的地方。BackstopJS 没有内置的 PR 阻断工作流:它会告诉你差异存在,但把它接入一个“此 PR 不能合并”的门禁就靠你自己了。它的配置存在于 JSON 中,一次一个场景,而到了几百个测试用例时,那份 JSON 本身就成了一个维护面。开发偏慢而非偏快:项目没有被归档,包目前处于 6.3.25 版本,仓库显示约有 7,200 个 GitHub 星标和 516 个未关闭的 issue。所以把 BackstopJS 当作成熟且可用的,而不是一个快速演进的视觉测试平台。
最尖锐的运维风险是 Docker 渲染。两个 issue, Docker 中的空白或被截断截图(#1156) 和 Docker 升级到 v5.3.0 后的不一致结果(#1303),已经开着好几年没有解决。Docker 同时又正是你想为 CI 用的东西,因为它把跨机器的渲染归一化。于是给你最多控制权的工具,也在你恰恰会用来运行它的那套配置里,递给你一类已知且未修复的不稳定。这是一个可以规划的风险,而非致命缺陷,但在你做出承诺之前,它应该摆上台面。
专业提示:跨操作系统的基线陷阱。如果你的开发者在 macOS 上采集基线而你的 CI 运行器是 Linux,你的测试仅仅因为字体抗锯齿的差异就会失败,甚至早于任何真正的回归出现之前。正如一位实践者所 记录的,字体渲染在 CI 服务所用的 Linux 镜像与本地 macOS 机器之间存在差异,足以让一个视觉测试自行失败。解决办法是在单一环境中生成并比较基线(在本地用与 CI 中相同的 Docker 镜像里运行 BackstopJS),使参考图与比较图来自完全相同的渲染。
Argos:最好的工作流,但实际上是 SaaS
Argos 以 BackstopJS 做不到的方式抓准了评审体验,而这正是它尽管有自托管的告诫仍出现在这份名单上的全部原因。它与 Playwright、Cypress、Storybook、WebdriverIO 和 Puppeteer 集成,并接入 GitHub Actions、GitLab CI、Bitbucket 和 Azure DevOps。PR 评审工作流是一等的产品界面,而且一直在推进。最近的 changelog 条目 加入了带固定评论的协作评审(2026 年 6 月)以及对不稳定变更的自动忽略。
它最有趣的技术差异点是比对。在确定性的像素比对之上,Argos 于 2025 年 11 月 4 日为其 Playwright SDK 加入了 ARIA 快照比对。ARIA 快照比对会把可访问性树(角色、标签和结构)与像素截图并排比较,从而捕捉纯像素比对可能漏掉的一类语义和可访问性回归(比如一个看上去仍然完全一样但丢失了可访问标签的按钮)。对于有可访问性承诺的团队,这是纯像素工具所不提供的一项真正能力。
接着是约束。代码是 MIT,但产品是那项托管服务,而维护者已经明确表示自托管既没有文档也不受支持。你可以从源码把它搭起来。你只是在明知任何上游变更都可能弄坏你的部署、而且没人有义务帮忙的情况下这么做。有一项相关的不确定性,值得指出而非断言:社区反馈暗示,GitLab Self-Managed 集成期望 Enterprise 方案(我把它当作社区信号,而非已确认的规格,所以在让它左右决定之前,请在你自己的配置上核实)。
这造成了一个尴尬的缺口。一支有严格隐私要求的团队(恰恰是最有动力去自托管的团队)如果同时想要 Argos 的评审体验,就没有好的路径。他们可以使用托管服务并接受第三方依赖,或在没有支持的情况下自托管,或选择另一款工具。没有干净的第四扇门,而把这一点讲出来,比假装开源许可把它关上了更为诚实。
本节要点:Argos 是更强的工具。自托管它并不受支持,而且在运维上很脆弱。
Lost Pixel:已归档,以及如果你在用该怎么办
Lost Pixel 仓库自己的 横幅 用一行道尽了整个故事:该仓库于 2026 年 4 月 22 日被所有者归档,如今是只读的。团队加入了 Figma,最后一次发布是 2024 年 11 月的 v3.22.0,也没有发布任何迁移指南。
在归档之前,Lost Pixel 是个合理的选择(基于 Docker 的渲染,支持 Playwright 和 Storybook 外加 Ladle 和 Histoire,以及整页和组件级两种视觉测试)。这些在 4 月 22 日都没有从技术上改变。改变的是,它如今没有维护者、没有安全补丁、没有路线图,而这对于一个 CI 依赖来说,无论当前版本运行得多好,对新工作都是不合格的。
如果你今天在用它,迁移会按你此前的用法来划分。如果你依赖它的组件级测试,尤其是 Storybook 或 Ladle 工作流,你最接近的替代是 Argos 的托管服务,或者 Playwright 的原生截图测试。BackstopJS 可以捕获选择器或 Storybook 的 URL,但不会给你和 Lost Pixel 一样的内置组件工作流,所以你得自己去建模那些组件状态。如果你把它用于整页视觉回归,BackstopJS 就是直接的自托管继任者。无论哪种情况,这次迁移都不是“你的构建明天就会坏”那种意义上的紧急,但时钟在走:一个不再维护的测试工具会随着你的浏览器、操作系统和框架版本逐渐远离它最后一次构建所针对的版本,而悄悄腐坏。
一眼看懂的对比
这里把相同的信息并排放着,好让你在把这些对 CI 决策要紧的维度套到你自己的约束上之前,先扫一眼。
| 维度 | BackstopJS | Argos | Lost Pixel |
|---|---|---|---|
| 许可 | MIT | MIT 代码,托管式 SaaS 产品 | MIT |
| 自托管的实情 | 设计上完全可自托管 | 可行但无支持、无文档 | 曾可自托管,如今已归档 |
| 维护状态 | 有维护,推进缓慢且成熟 | 活跃(托管服务) | 于 2026 年 4 月 22 日归档 |
| 比对方式 | 像素比对(Resemble.js) | 像素比对加上 ARIA 快照比对 | 像素比对(无维护) |
| 框架与引擎支持 | Puppeteer(默认)、Playwright | Playwright, Cypress, Storybook, WebdriverIO, Puppeteer | Playwright、Storybook、Ladle、Histoire(归档时) |
| 评审工作流 | HTML 报告、手动批准、无 PR 门禁 | PR 评审、协作评论、PR 门禁 | 不适用(已归档) |
| 成本 | 免费 | SaaS 定价(按快照) | 免费但无维护 |

如何选择(决策框架)
从你最硬的约束出发,而不是从功能清单出发。约束会替你划掉菜单的大部分。
- 完全自托管、零预算,并且你能接受只做整页测试加手动评审: BackstopJS。它是同时满足自托管、有维护和免费的唯一选项,而那些取舍(无 PR 门禁、JSON 配置、Docker 不稳定)都是你可以围绕其设计的已知量。
- 你想要最好的评审体验、PR 门禁和 ARIA 比对,并且能接受对 SaaS 的依赖: Argos 托管服务。这是通往 Argos 各项强项、又不带不受支持自托管风险的路径。如果一条合规规则禁止把截图上传给第三方,这扇门就关上了,你就回到 BackstopJS。
- 测试套件小,或以 Playwright 为先: 考虑根本不添加任何专用工具。Playwright 原生自带
toHaveScreenshot(),而对于大约 100 个测试以下的套件,它也许就是你所需要的全部。一份 实践者指南 把专用工具开始物有所值的拐点放在大约那个规模(请把它当作行业观察,而非官方的 Playwright 数字)。在 git 里管理基线文件的开销会越过那一点而增大,而正是在那里,专用工具才回本。 - 当前在用 Lost Pixel: 按上一节的划分,现在就迁移。不要把“它还能用”当作留下的理由。
有一条告诫先于所有这些工具,也比它们活得更久: Sparkbox 团队多年前撰文时,特意选了一个托管选项,正是因为让工程师真正去用那些测试,比搭建本身更难。一个评审界面较弱的自托管工具,可能在成本上取胜,却在采用上落败(如果你的团队无视一份吵闹的 BackstopJS 报告,它的零许可成本就什么也没给你带来)。把评审体验纳入决策,而不只是价格。
本节要点:约束选定工具。自托管且免费指向 BackstopJS,最好工作流且可接受 SaaS 指向 Argos,而小规模且以 Playwright 为先则可能指向根本不用任何工具。
为无头 Chromium 确定 CI 运行器的规格
三款工具都驱动无头 Chromium,而决定你运行器规格的是 Chromium 的内存占用(而非 CPU),因为每个并发的浏览器工作进程都想要它自己的那几个 GB 内存。把机器规格定得太小,你的视觉测试就不会干净地失败。它们会在运行途中被 OOM 杀掉,并被报告为不稳定的基础设施噪声——这是最糟糕的一类失败,最难调试。
作为一个大致的指引,按并行度而非硬性数字来估(实际用量取决于页面复杂度以及你并行运行多少个工作进程):
- 小团队或串行测试: 约 2 vCPU / 4 GB RAM 就能应付单个无头 Chromium 工作进程外加 CI 守护进程的开销。
- 团队级 CI 使用: 约 4 vCPU / 8 GB RAM 支持大约 2 到 4 个并行浏览器工作进程,大多数团队落在这里。
- 高吞吐或大型套件: 用于高并行度约 8 vCPU / 16 GB RAM,或当视觉回归运行与其他 CI 工作共享一个运行器时。
存储是那项安静的开支。截图产物和历史基线会一次次运行地累积,所以要为那种增长做规划:如果你把基线保存在本地,就预留充裕的存储余量,或者把基线和产物推到对象存储,好让运行器的磁盘不成为瓶颈。
对于做这件事的自托管 CI 运行器,VPS 是天然的宿主,因为你想为 Chromium 工作进程要到可预测的专属内存,而一台家庭实验室机器只有在硬件已经摆在那里时才说得通。如果你连周边的 CI 栈也一并搭起来,围绕视觉测试工具的那些部件就是 Cloudzy 应用市场里的一键部署:作为 CI 代码托管的 Gitea、GitLab、Jenkins 和 Forgejo,以及为工具所需渲染一致性而用的 Docker。视觉回归工具本身通过 npm 或 Docker 装在上面,所以按上面的区间定好规格,起一台 Linux VPS 并在那儿运行它。如果你在搭建基于 Docker 的 CI,Cloudzy 关于 自托管 GitLab 替代品 和 列出 Docker 容器 的指南涵盖了相邻的搭建。

常见问题
Argos 可以自托管吗?
技术上可以(代码采用 MIT 许可),但维护者在 2025 年 9 月表示,Argos 不为在托管服务之外运行它提供任何支持或文档。把自托管当作不受支持且在运维上脆弱的:它可能在任何上游变更时坏掉,而没有哪位维护者有义务帮忙。对大多数团队而言,托管服务才是获得 Argos 好处的务实办法。
Lost Pixel 出了什么事?
Lost Pixel 在团队加入 Figma 并终止该产品时,于 2026 年 4 月 22 日被归档。仓库是只读的,最后一次发布是 2024 年 11 月的 v3.22.0,也没有提供任何迁移指南。不要为新工作采用它。如果你在用,请规划迁移到 BackstopJS(整页测试)或 Argos 以及 Playwright 原生(组件测试)。
什么是 ARIA 快照比对?
ARIA 快照比对会把可访问性树(角色、标签和结构)与像素截图并排比较,捕捉单靠像素比对可能漏掉的语义和可访问性回归,比如一个视觉上完全一样却丢失了可访问标签的按钮。Argos 于 2025 年 11 月 4 日加入了该功能。
在 CI 中无头 Chromium 需要多少内存?
单个串行工作进程通常在约 2 到 4 GB 上运行,而并发的工作进程从那里起大致线性地扩展内存。实际用量取决于页面复杂度以及你并行运行多少个浏览器实例,所以把这些数值当作指引而非硬性数字,并留出余量以避免被 OOM 杀掉的测试运行。
BackstopJS 支持 Playwright 吗?
支持。Puppeteer 是默认引擎(无头 Chrome),而 BackstopJS 也在 chromium、firefox 和 webkit 上支持 Playwright。引擎在你的配置里选择。