Пара слов про визуальное тестирование.
Так получилось, что последние несколько лет я мало занимался тестированием UI.
Верстка, лэйауты, тексты и всяческий пиксель пёрфект тестировался по остаточному принципу.
Зацепился глаз - хорошо, нет - позже исправим.
Поэтому, моё восприятие визуального тестирования и его полезности осталось на уровне многострадального Sikuli.
Использовать его было больно.
Тесты вели себя нестабильно, сравнения часто выдавали false-negative результаты, а создание, обновление и поддержка baseline сжирало кучу ресурсов.
Итоговый объем проблем от такого тестирования зачастую перевешивал профит.
Сейчас пришлось столкнуться заново с этой задачей.
Мы довольно бодро меняем и допиливаем UI.
Здесь поменяли текст, здесь тултип добавили, здесь порядок элементов поменяли.
А здесь при мерже потеряли обновленный текст, например.
Банальное высматривание интерфейсов начинает сбоить, или требует массу времени.
При этом на продуктовых метриках последствия таких ошибок заметны.
Посмотрев, что нового появилось в области визуального тестирования за последние несколько лет я, надо признать, приятно удивился.
Инструментов появилось довольно много, начиная от надстроек над UI тестами, вроде
Cypress Visual Regression и заканчивая AI-powered-модно-молодежными продуктами, типа
Functionize.
После некоторого времени на ресерч и нескольких проб и ошибок, пока что остановил свой взор на
Percy от Browserstack.
По двум основным причинам.
Во первых, мне понадобилось примерно 30 минут, что бы раскидывать по уже существующим E2E тестам нужные вызовы.
Естественно, чем больше специфичных кейсов ты покрываешь, тем больше времени на это тратится.
Но быстрый старт для получения первых результатов - это классная фича для любого продукта.
Во вторых, это, всё таки, semi-automated тесты, а не полностью автоматизированное тестирование.
В разных обстоятельствах это может быть и плюсом, и минусом, но в моём конкретном случае - я не хочу, что бы падение pixel-perfect проверки роняло мои тесты.
Я хочу получать репорт ввиде "вот на этом экране у вас изменился UI" и принять решение, что с этим делать.
По факту, это просто инструмент, помогающий мне найти аномалии в UI, а не тестирующий его вместо меня.
Вопросов по этому поводу, конечно, тоже хватает.
Первый и главный это, конечно, прайсинг.
Прайсинг привязанный к количеству скриншотов, которые ты делаешь в месяц - очень коварная штука.
По мере того, как продукт растёт и увеличивается количество тестов, ты начинаешь тратить всё больше денег.
А когда итоговая сумма перестает тебя устраивать, отказываться от инструмента уже не очень комфортно - всё таки уже работает и приносит пользу.
Второй - чувствительность к данным.
Любые визуальные очень сильно зависимы от контента, который ты отображаешь.
Разные объемы текстов, разные изображения, кастомизация интерфейсов - всё это рождает "другой" UI, который надо обрабатывать отдельно.
Это увеличивает количество тестовых сценариев.
Что ещё хуже - это требует гораздо более строгой подготовки тестовых данных.
Третий - фича флаги, A/B-тесты и комбинаторика состояний. Как и предыдущий пункт, эта проблема общая для визуальных тестов.
По мере того, как вы добавляете всё новые и новые кастомизации интерфейсов, количество "уникальных" состояний каждой страницы растёт.
И даже если ты не покрываешь тестами их все, тебе нужно гарантировать, что на визуальный тест попадёт пользователь с нужным тебе набором флагов и АБ-тестов.
Для визуальных тестов поверх E2E это требует дополнительных настроек и логики, которую не всегда просто поддерживать.
В итоге, пока что всё это живёт как proof-of-concept.
Смотрим на результаты, объем поддержки и затраты и, потихоньку, собираем метрики, что бы понять, будем ли дальше развивать визуальное тестирование.
А вы пользуетесь инструментами визуального тестирования? Делитесь опытом и впечатлениями.
Какими инструментами пользуетесь, с какими проблемами сталкивались и как их решали?