QA Meetup от OneTwoTrip: развитие автоматизации UI в компании

11 июля в Санкт-Петербурге мы провели офлайн-митап для QA, на котором эксперты OneTwoTrip выступили с интересными докладами. В этой статье хотим подробно остановиться на выступлении Виктора Усачёва, который поделился историей развития автоматизации UI в OneTwoTrip за последние четыре с половиной года.

Видео выступления спикера можно посмотреть по ссылке.

О спикере

QA Meetup от OneTwoTrip: развитие автоматизации UI в компании

Виктор Усачев — QA Lead в команде Extranet (это внутренний проект OneTwoTrip, который позволяет подключать к сервису владельцев объектов размещения). Виктор в тестировании больше 9 лет, почти половину из которых работает в OneTwoTrip, где занимается развитием качества Extranet.

2020 год: определение проблем

Когда я только пришёл в команду OneTwoTrip, тесты в сервисе писали на Kotlin с использованием фреймворка Selenide, лишь в паре проектов использовали UI тесты Javascript + Puppeteer. Всего в компании было чуть больше 300 тестов, что довольно мало.

Команда QA проанализировала ситуацию, и мы выявили следующие проблемы:

  • Разработчики совсем не писали тесты.
  • Использовался фрейморк, который не нативен для фронта.
  • В компании писали в основном e2e-тесты.
  • Высокий порог входа: новым специалистам было сложно начинать писать автотесты.
  • Тесты гоняли только на одном движке Chromium.
  • Версия движка редко обновлялась.

2021 год: поиск решений

Первым делом мы с командой решили попробовать перейти на более нативный язык для фронтовой разработки (JavaScript) и попробовать фреймворк WebdriverIO. В это же время начались первые пробы использования JavaScript + Playwright в проектах, где ранее был Puppeteer.

Результаты были неплохими: всего за год количество тестов увеличилось вдвое: до 600 по всей компании. Но к концу 2021-года большинство проблем остались — изменился только фреймворк и язык. Плюс появилась новая сложность, связанная с WebdriverIO: не было возможности перезапускать упавшие тесты.

2022 год: всё больше тестов

Было решено переписать все тесты e2e с WebdriverIO на Playwright, который к тому времени начали использовать в компании. И за год обновили порядка 400 тестов. Кроме того, во все проекты фронтенда внедрили Playwright как стандарт для UI-тестов. Эти изменения коснулись примерно десятка проектов, или около 600 тестов.

В результате фронтенд-разработчики наконец-то начали активнее помогать с написанием тестов — к концу 2022 года в сервисе их было более 1 000. Также благодаря стандартизации работы с фреймворком снизился порог входа. А перезапускать упавшие тесты оказалось возможным благодаря раннеру самого Playwright.

2023 год: под эгидой Playwright

Плюсы Playwright оказались существенными:

  • Браузерные движки лежат в самом Playwright и постоянно обновляются.
  • Подробная документация.
  • Низкий порог входа.
  • Реран упавших тестов.
  • Большое комьюнити, благодаря которому легко искать решение проблем.

Количество тестов по сравнению с 2020 годом выросло в десять раз: теперь их было более 3 000. Однако команда продолжала анализировать ситуацию и выявлять сложности. На некоторых из них я в своём докладе останавливался подробнее.

Проблема 1: разные версии Node.js и Playwright в фронтовых и e2e-проектах. Если разработчик работал над автотестами в нескольких проектах, он мог писать их на одной версии Playwright, а дальше в Jenkins они запускались на другой.

Чтобы решить эту проблему, разработчики берут докер-образ Playwright (на 7:25 есть qr-код, где можно подробно ознакомиться с контейнером), добавляют в контейнер нужную версию Node.js, которая используется в конкретном проекте, и в результате тесты прогоняются на зафиксированных версиях Node.js и Playwright. Чтобы эти образы было легко обновлять, их сборку вынесли в Jenkins, где разработчик указывает актуальную версию и собирает подходящий под проект контейнер.

Проблема 2: смещение на один пиксель при снепшот тестах (на 9:20 можно увидеть, как это выглядит). Проблема появилась из-за того, что разработчики и QA, которые пишут автотесты, не пользуются одной операционной системой, в результате движки рендерятся немного по-разному. Чтобы решить эту проблему, ребята написали скрипт обновления снепшотов во фронт-проекте (схему его действия можно увидеть на 10:24).

2024 год: где мы сейчас

Результаты работы моей команды очень впечатляют: в 2024 году тестовая модель быстро развивается и пополняется, и по всей компании уже более 6 500 тестов (напомню, было 300).

Тесты есть на разных уровнях фронта — фактически команда создала собственную пирамиду тестирования. Тесты гоняются в pipeline.

Также QA добавили в регламент разработки написание автотестов на UI-слое. Старый функционал дорабатывается или же создаётся новый — пишут простой тест, который обрабатывает этот функционал и проверяет базовый кейс. Далее QA при необходимости расширяет тестовую модель.

Общие компоненты для работы с тестами теперь вынесены в отдельные пакеты Playwright-toolkit, где собраны концепции по работе с проектами на Playwright. Это позволяет стандартизировать работу. Также появился пакет docker-pw, в который собраны снепшоты в докер-образе.

QA Meetup от OneTwoTrip: развитие автоматизации UI в компании

Планы на будущее

Их сравнительно немного, но они довольно масштабные. Вот, что мы планируем:

  • Максимально увеличить покрытие всех фронтовых проектов. Сейчас оно порядка 50–60%, а хочется достичь минимум 90%.
  • Сформировать максимально необходимый список e2e-тестов, который будет постоянно поддерживаться. Это поможет сократить количество ручных проверок.
  • И наконец, хотим добавить интеграцию с Allure TestOPS.
22
Начать дискуссию