Перейти к основному содержанию
Скидка 50% все планы, ограниченное время. Начиная от $2.48/mo
13 min left
Инструменты разработчика и DevOps

Self-Hosted Visual Regression Testing: BackstopJS vs. Argos (and What Happened to Lost Pixel)

M Автор: Matej 13 мин чтения
Comparison of self-hosted visual regression testing tools BackstopJS, Argos, and the archived Lost Pixel.

Представьте, что вы стандартизируете свой CI на одном из трёх инструментов визуального регрессионного тестирования с открытым кодом, которые все включают в шорт-лист (BackstopJS, Argos, Lost Pixel), и через неделю после начала исследования обнаруживаете, что два из трёх не такие, какими казались снаружи. У Argos отличный код на GitHub, но его сопровождающий прямо говорит, что self-hosting не поддерживается и не документирован. Lost Pixel был заархивирован 22 апреля 2026 года, когда команда перешла в Figma, и не оставил никакого пути миграции для команд, уже использующих его.

Это оставляет ровно один из трёх, который сегодня действительно можно развернуть самостоятельно и который сопровождается. Странно говорить такое о категории с таким кажущимся обилием выбора, но именно так на самом деле выглядит ландшафт. Инструменты, которые люди воспринимают как три равнозначных, на практике это один работающий self-hosted вариант, один сильный инструмент, живущий на чужих серверах, и один, с которого вам стоит уходить.

Это обзор с приоритетом на self-hosting о тех self-hosted инструментах визуального регрессионного тестирования, которые переживают столкновение с реальностью: какой подходит под какое ограничение и что делать, если вы прямо сейчас на Lost Pixel.

Кратко

  • BackstopJS это self-hosted, сопровождаемый, лицензированный по MIT вариант с нулевой стоимостью. Puppeteer по умолчанию с поддержкой Playwright, попиксельное сравнение через Resemble.js и HTML-интерфейс ревью (с оговорками по рендерингу в Docker, которые нужно учесть).
  • Argos это более сильный инструмент по рабочему процессу (ревью PR и сравнение ARIA-снимков с конца 2025 года), но на практике это управляемый SaaS. Сопровождающий не предоставляет ни поддержки, ни документации для самостоятельного запуска.
  • Lost Pixel был заархивирован в апреле 2026 года. Не берите его для новой работы, а если вы на нём, планируйте миграцию уже сейчас.

Вердикт в одну строку: для полностью self-hosted CI-конвейера BackstopJS практичный выбор. Если вам нужен лучший рабочий процесс ревью и вы можете принять зависимость от SaaS, Argos лучший инструмент.

(Чего это не охватывает: визуальное тестирование на основе Cypress, специфичные для Storybook компонентные процессы и измеренные вручную показатели производительности. Это сравнение построено на фактах из первоисточников, а не на тестовом стенде, который я запускал сам.)

Ландшафт self-hosted визуального регрессионного тестирования изменился

Два конкретных события за последний год переформировали этот шорт-лист, и оба легко упустить, если вы работаете со статьёй-списком, написанной до того, как они произошли.

Первое: в обсуждении на GitHub в сентябре 2025 годасопровождающий Argos заявил, что Argos не предоставляет ни поддержки, ни документации для запуска вне управляемого сервиса. Код лицензирован по MIT и лежит открыто, поэтому «вы можете развернуть его сами» технически верно, но поддерживаемого пути нет — различие, которое становится колоссально важным, как только именно вы дежурите по нему.

Второе: репозиторий Lost Pixel был заархивирован 22 апреля 2026 года, в режиме только для чтения, когда команда объявила, что она переходит в Figma. Никакого руководства по миграции закрытие не сопровождало. Инструмент, который до недавнего времени был законной бесплатной self-hosted альтернативой Percy и Chromatic, теперь зависимость без сопровождающего.

Оба изменения указывают в одном направлении. Причина, по которой команды вообще сюда приходят — ценообразование SaaS, растущее как браузеры на область просмотра на страницы, или требование комплаенса против загрузки скриншотов невыпущенного интерфейса третьей стороне — не исчезла. Изменилось то, что self-hosted меню короче, чем кажется.

Ключевой вывод раздела: Только один из трёх инструментов, которые люди включают в шорт-лист, сегодня действительно self-hosted и активно сопровождается.

Timeline showing the self-hosted visual regression landscape in 2025-2026: BackstopJS remains maintained and self-hosted, Argos shifts to SaaS-only in practice, and Lost Pixel is archived and read-only.

BackstopJS: действительно self-hosted вариант

Установка это npm install -g backstopjs (или локальная установка в проекте), и один этот факт объясняет большую часть того, почему BackstopJS выигрывает по оси self-hosting: нет сервиса, который нужно реверс-инжинирить, нет управляемого бэкенда, от которого он тайно зависит. Он работает как npm-пакет или Docker-контейнер на инфраструктуре, которую вы контролируете, под лицензией MIT, с нулевой стоимостью лицензии. README отмечает, что текущая линейка (6.3.x) поддерживает Node 20.

Под капотом он по умолчанию управляет Puppeteer (headless Chrome), а также поддерживает Playwright в chromium, firefox и webkit. Сравнение попиксельное через 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, ваши тесты будут падать из-за одних лишь различий в сглаживании шрифтов, ещё до того как появится хоть какая-то реальная регрессия. Как задокументировалодин практик, рендеринг шрифтов различается между Linux-образом, используемым в CI-сервисах, и локальной машиной на macOS, достаточно чтобы визуальный тест провалился сам по себе. Решение генерировать и сравнивать базовые снимки в одной среде (запускайте BackstopJS локально в том же Docker-образе, что и в CI), чтобы эталонные и сравниваемые изображения происходили из идентичного рендеринга.

Argos: лучший рабочий процесс, но на практике SaaS

Argos попадает в опыт ревью так, как у BackstopJS не выходит, и это единственная причина, по которой он в этом списке несмотря на оговорку о self-hosting. Он интегрируется с Playwright, Cypress, Storybook, WebdriverIO и Puppeteer и подключается к GitHub Actions, GitLab CI, Bitbucket и Azure DevOps. Процесс ревью PR это первоклассная продуктовая поверхность, и он продолжал двигаться. Свежие записи в журнале изменений добавляют совместные ревью с закреплёнными комментариями (июнь 2026 года) и автоматическое игнорирование нестабильных изменений.

Его самый интересный технический отличительный признак это сравнение. Поверх детерминированного попиксельного сравнения Argos добавил сравнение ARIA-снимков для своего Playwright SDK 4 ноября 2025 года. Сравнение ARIA-снимков сопоставляет дерево доступности (роли, метки и структуру) наряду с попиксельным скриншотом, что улавливает класс семантических регрессий и регрессий доступности, которые чисто попиксельное сравнение может пропустить (например, кнопку, которая всё ещё выглядит идентично, но потеряла свою доступную метку). Для команд с обязательствами по доступности это настоящая возможность, которой не предлагают чисто попиксельные инструменты.

Затем ограничение. Код это MIT, но продукт это управляемый сервис, и сопровождающий прямо заявил, что self-hosting не документирован и не поддерживается. Вы можете поднять его из исходников. Вы просто делаете это, понимая, что любое изменение вверх по течению может сломать ваше развёртывание, и никто не обязан помогать. Есть связанная неопределённость, которую стоит обозначить, а не утверждать: сообщения сообщества предполагают, что интеграция с GitLab Self-Managed ожидает план Enterprise (я рассматриваю это как сигнал сообщества, а не подтверждённую спецификацию, поэтому проверьте на своей собственной конфигурации, прежде чем это станет двигать решение).

Это порождает неудобный разрыв. У команды со строгими требованиями к приватности (именно той команды, которая больше всего мотивирована на self-hosting), которая при этом хочет опыт ревью Argos, нет хорошего пути. Они могут использовать управляемый сервис и принять зависимость от третьей стороны, или развернуть без поддержки, или выбрать другой инструмент. Чистой четвёртой двери нет, и честнее это назвать, чем делать вид, будто лицензия с открытым кодом её закрывает.

Ключевой вывод раздела: Argos более сильный инструмент. Развёртывать его самостоятельно не поддерживается и эксплуатационно хрупко.

Lost Pixel: заархивирован, и что делать, если вы на нём

Собственный баннер репозитория Lost Pixel это вся история в одной строке: репозиторий был заархивирован владельцем 22 апреля 2026 года и теперь доступен только для чтения. Команда перешла в Figma, последний релиз был v3.22.0 в ноябре 2024 года, и никакого руководства по миграции опубликовано не было.

До архивации Lost Pixel был разумным выбором (рендеринг на основе Docker, поддержка Playwright и Storybook плюс Ladle и Histoire, а также визуальное тестирование как полностраничное, так и на уровне компонентов). Ничто из этого технически не изменилось 22 апреля. Изменилось то, что теперь у него нет сопровождающего, нет патчей безопасности и нет дорожной карты, что для CI-зависимости дисквалифицирует его для новой работы, как бы хорошо ни работала текущая версия.

Если вы на нём сегодня, миграция делится по тому, как вы его использовали. Если вы полагались на его тестирование на уровне компонентов, особенно процессы Storybook или Ladle, ваша ближайшая замена это управляемый сервис Argos или нативное тестирование скриншотов в Playwright. BackstopJS может снимать селекторы или URL-адреса Storybook, но не даёт вам тот же встроенный компонентный процесс, что давал Lost Pixel, так что вам пришлось бы моделировать эти состояния компонентов самостоятельно. Если вы использовали его для полностраничной визуальной регрессии, BackstopJS это прямой self-hosted преемник. В любом случае переход не срочен в смысле «ваши сборки сломаются завтра», но время идёт: несопровождаемый инструмент тестирования тихо гниёт по мере того, как версии вашего браузера, ОС и фреймворка уходят от тех, под которые он собирался в последний раз.

Сравнение с одного взгляда

Вот та же информация бок о бок, чтобы вы могли пробежать по осям, важным для решения по CI, прежде чем накладывать их на свои собственные ограничения.

ОсьBackstopJSArgosLost Pixel
ЛицензияMITКод MIT, управляемый SaaS-продуктMIT
Реальность self-hostingПолностью self-hosted по замыслуВозможно, но без поддержки и без документацииБыл self-hosted, теперь заархивирован
Статус сопровожденияСопровождается, медленно развивается и зрелыйАктивен (управляемый сервис)Заархивирован 22 апреля 2026 года
Подход к сравнениюПопиксельное сравнение (Resemble.js)Попиксельное сравнение плюс сравнение ARIA-снимковПопиксельное сравнение (несопровождаемое)
Поддержка фреймворков и движковPuppeteer (по умолчанию), PlaywrightPlaywright, Cypress, Storybook, WebdriverIO, PuppeteerPlaywright, Storybook, Ladle, Histoire (на момент архивации)
Процесс ревьюHTML-отчёт, ручное одобрение, без шлюза PRРевью PR, совместные комментарии, шлюзование PRНеприменимо (заархивирован)
СтоимостьБесплатноЦены SaaS (на основе снимков)Бесплатно, но несопровождаемо
Side-by-side comparison of BackstopJS, Argos, and Lost Pixel across self-hosting, maintenance, diffing, review workflow, and cost.

Как выбирать (рамка принятия решения)

Отталкивайтесь от своего самого жёсткого ограничения, а не от списка функций. Ограничение вычёркивает большую часть меню за вас.

  • Полностью self-hosted, нулевой бюджет, и вы можете принять только полностраничное тестирование с ручным ревью: BackstopJS. Это единственный вариант, который одновременно удовлетворяет self-hosted, сопровождаемый и бесплатный, а компромиссы (без шлюза PR, конфигурация в JSON, нестабильность Docker) это известные величины, вокруг которых можно проектировать.
  • Вам нужен лучший опыт ревью, шлюзование PR и ARIA-сравнение, и вы можете принять зависимость от SaaS: управляемый сервис Argos. Это путь к сильным сторонам Argos без риска неподдерживаемого self-hosting. Если требование комплаенса запрещает загрузку скриншотов третьей стороне, эта дверь закрыта, и вы возвращаетесь к BackstopJS.
  • Небольшой набор тестов или Playwright в первую очередь: подумайте о том, чтобы вообще не добавлять выделенный инструмент. Playwright поставляется с toHaveScreenshot() нативно, и для наборов примерно до 100 тестов этого может быть всё, что вам нужно. Одно руководство практика помещает точку перелома, где выделенный инструмент начинает оправдывать себя, примерно на этом масштабе (относитесь к этому как к отраслевому наблюдению, а не к официальной цифре Playwright). Накладные расходы на управление файлами базовых снимков в git растут за этой точкой, и вот тут выделенный инструмент окупается.
  • Сейчас на Lost Pixel: мигрируйте сейчас, согласно разделению из предыдущего раздела. Не воспринимайте «оно ещё работает» как причину остаться.

Оговорка, которая предшествует всем этим инструментам и переживает их: команда Sparkbox, писавшая много лет назад, выбрала хостируемый вариант именно потому, что заставить инженеров действительно пользоваться тестами было труднее, чем настройка. Self-hosted инструмент со слабым интерфейсом ревью может выиграть по стоимости и проиграть по внедрению (если ваша команда игнорирует шумный отчёт BackstopJS, его нулевая стоимость лицензии ничего вам не принесла). Учитывайте опыт ревью в решении, а не только цену.

Ключевой вывод раздела: Ограничение выбирает инструмент. Self-hosted и бесплатно указывает на BackstopJS, лучший рабочий процесс при приемлемом SaaS указывает на Argos, а маленький и Playwright в первую очередь может указывать вообще ни на какой инструмент.

Определение размера CI-раннера под headless Chromium

Все три инструмента управляют headless Chromium, и именно потребление памяти Chromium (а не CPU) задаёт размер вашего раннера, потому что каждый параллельный браузерный воркер хочет свои несколько гигабайт RAM. Занизите размер машины, и ваши визуальные тесты не падают чисто. Их убивает OOM посреди прогона, и они докладываются как нестабильный инфраструктурный шум, худший вид сбоя для отладки.

В качестве примерного ориентира, размеченного по параллелизму, а не как жёсткие цифры (фактическое использование зависит от сложности страницы и от того, сколько воркеров вы запускаете параллельно):

  • Небольшая команда или последовательные тесты: примерно 2 vCPU / 4 GB RAM справляются с одним воркером headless Chromium плюс накладные расходы CI-демона.
  • Командное использование CI: примерно 4 vCPU / 8 GB RAM поддерживают около 2–4 параллельных браузерных воркеров, где оказывается большинство команд.
  • Высокая пропускная способность или крупные наборы: примерно 8 vCPU / 16 GB RAM для высокого параллелизма, или когда прогон визуальной регрессии делит раннер с другой CI-работой.

Хранилище это тихая статья расходов. Артефакты скриншотов и исторические базовые снимки накапливаются от прогона к прогону, поэтому планируйте этот рост: заложите щедрый запас хранилища, если держите базовые снимки локально, или отправляйте базовые снимки и артефакты в объектное хранилище, чтобы диск раннера не был ограничением.

VPS это естественный хост для self-hosted CI-раннера, делающего это, потому что вам нужна предсказуемая, выделенная RAM для воркеров Chromium, а домашняя машина имеет смысл, только если железо уже стоит. Если вы поднимаете и окружающий CI-стек, части вокруг инструмента визуального тестирования это развёртывания в один клик в маркетплейсе Cloudzy: Gitea, GitLab, Jenkins и Forgejo для CI-форжа и Docker для согласованности рендеринга, которая нужна инструментам. Сам инструмент визуальной регрессии устанавливается сверху через npm или Docker, так что поднимите Linux VPS размеченный по диапазонам выше, и запускайте его там. Если вы связываете CI на основе Docker, руководства Cloudzy по self-hosted альтернативам GitLab и перечислению Docker-контейнеров охватывают смежную настройку.

CI runner sizing for headless Chromium across three tiers: 2 vCPU / 4 GB for serial tests, 4 vCPU / 8 GB for 2 to 4 parallel workers, and 8 vCPU / 16 GB for large suites, with storage headroom for baselines.

Часто задаваемые вопросы

Можно ли развернуть Argos самостоятельно?

Технически да (код лицензирован по MIT), но сопровождающий заявил в сентябре 2025 года, что Argos не предоставляет ни поддержки, ни документации для запуска вне управляемого сервиса. Относитесь к self-hosting как к неподдерживаемому и эксплуатационно хрупкому: он может сломаться при любом изменении вверх по течению, и ни один сопровождающий не обязан помогать. Для большинства команд управляемый сервис это практичный способ получить преимущества Argos.

Что случилось с Lost Pixel?

Lost Pixel был заархивирован 22 апреля 2026 года, когда команда перешла в Figma и закрыла продукт. Репозиторий доступен только для чтения, последний релиз был v3.22.0 в ноябре 2024 года, и никакого руководства по миграции предоставлено не было. Не берите его для новой работы. Если вы его используете, планируйте миграцию на BackstopJS (полностраничное тестирование) или на Argos и Playwright-нативное (тестирование компонентов).

Что такое сравнение ARIA-снимков?

Сравнение ARIA-снимков сопоставляет дерево доступности (роли, метки и структуру) наряду с попиксельным скриншотом и улавливает семантические регрессии и регрессии доступности, которые попиксельное сравнение само по себе может пропустить, например визуально идентичную кнопку, потерявшую свою доступную метку. Argos добавил эту функцию 4 ноября 2025 года.

Сколько RAM нужно headless Chromium в CI?

Один последовательный воркер обычно работает примерно на 2–4 GB, а параллельные воркеры масштабируют RAM оттуда примерно линейно. Фактическое использование зависит от сложности страницы и от того, сколько экземпляров браузера вы запускаете параллельно, поэтому относитесь к этим значениям как к ориентирам, а не жёстким цифрам, и оставляйте запас, чтобы избежать убитых OOM прогонов тестов.

Поддерживает ли BackstopJS Playwright?

Да. Puppeteer это движок по умолчанию (headless Chrome), и BackstopJS также поддерживает Playwright в chromium, firefox и webkit. Движок вы выбираете в своей конфигурации.

Поделиться

Ещё в блоге

Читайте дальше.

Gitea vs Forgejo vs OneDev: choosing between a lightweight self-hosted git server and an all-in-one dev platform.
Инструменты разработчика и DevOps

Gitea против Forgejo против OneDev: выбор самостоятельно размещаемой git-платформы

Сравнение Gitea, Forgejo и OneDev для самостоятельного хостинга: управление, CI/CD, затраты по RAM и то, что подойдёт именно вашей команде. Прямое руководство для принятия решения,

Bill 14 мин чтения
Diagram of the Gitea to Forgejo migration version cliff showing the supported direct path ending at Gitea 1.22
Инструменты разработчика и DevOps

Как перенести данные из Gitea в Forgejo, не сломав репозитории

Прямые обновления с Gitea на Forgejo заканчиваются на Gitea 1.22. Для Gitea 1.23+ сравните понижение версии SQL, инструменты миграции, импорт через API, резервные копии и то, что л

Chike 18 мин чтения

Готовы к развёртыванию? От $2,48/мес.

Независимое облако с 2008 года. AMD EPYC, NVMe, 40 Gbps. Возврат денег в течение 14 дней.