Тестирование с Playwright
Теория: Непрерывная интеграция
Непрерывная интеграция (CI) - процесс, который автоматически запускает разнообразные проверки качества кода по git-событиям, например, коммиту, отправке пулреквеста или созданию тега. В такие проверки входят анализ стиля кода с помощью линтеров, запуск тестов и даже анализ на безопасность.
Для реализации CI пользуются готовыми решениями. Начиная от SaaS-сервисов до систем, которые устанавливаются к себе на сервера. Среди них наиболее популярными считаются Github Actions (SaaS), Gitlab CI (SaaS/Self-hosted) и Jenkins (self-hosted). Все они работают по одному и тому же принципу: изменения в коде => запускаем проверки => шлем отчет.
Разработчик -> Git push -> CI запускает линтер и тестирование ->
-> Если успешно -> Слияние изменений
-> Если неуспешно -> Логирование ошибок и уведомление команды
Из этого, кстати, следует один вывод. Для работы такой системы нужно чтобы тесты и код находились в одном репозитории. Только тогда изменение в тестах или в коде будут отрабатывать. Для реализации более сложных конфигураций, когда тесты и код находятся в разных местах есть свои подходы, но это остается за рамками урока.
Как работает CI для Playwright?
Процесс автоматического тестирования с Playwright в CI можно представить так:
[Разработчик] --push--> [CI сервер] --запуск--> [Проект] --подготовка-->
[Линтер] --проверка--> [Тесты] --результат--> [✅ Успех / ❌ Ошибка]
Для его настройки обычно нужно выполнить два шага:
- Зарегистрироваться в сервисе CI и завести там проект подключив репозиторий.
- Настроить конфигурацию CI в специальном файле внутри вашего репозитория.
Первый шаг нужен только в том случае, если вы используете стороннюю по отношению к хранилищу проекта систему, например, Jenkins. Если же CI это часть платформы хранения кода, то шаг пропускается. В первую очередь это относится к Github Actions и Gitlab CI, для них достаточно создать правильный файл и закоммитить его. Дальше все работает автоматически.
Github Actions
Проекты расположенные на Github могут воспользоваться Github Actions, который доступен из коробки. Только учтите, что для закрытых проектов он платный и стоимость зависит от нагрузки (количество запусков и другие параметры) на их систему. Но есть и хорошая новость. Github Actions позволяет подключить свою машину, на которой будут выполняться проверки. В таком случае платить придется только за свой сервер, а Github Actions обеспечит весь процесс бесплатно. Например, так устроено тестирование практических заданий на Хекслете.
Для подключения Github Actions достаточно создать файл .github/workflows/playwright.yml внутри вашего проекта. Ниже приведена базовая структура, которую можно и даже нужно менять под себя.
Процесс подготовки тестового окружения и его запуска не отличается от локального использования. Мы так же устанавливаем зависимости, скачиваем нужные браузеры и запускаем тесты. Ситуация будет другой, если тестируемый проект требует своей настройки и запуска. В таком случае в этом файле нужно добавить команды для его подготовки к тестированию.
Gitlab CI
Для подключения Gitlab CI нужно в корне проекта создать файл .gitlab-ci.yml со следующим содержимым:
В случае с Gitlab CI используется Docker-образ, в котором предустановленны все основные браузеры, поэтому их не нужно ставить отдельно.
Отладка запуска
Playwright поддерживает переменную окружения DEBUG, которая включает вывод логов Playwright во время запуска браузеров. Ее удобно использовать в том случае, если видны какие-то проблемы старта, которые не очевидно как решать.
Конфигурация
Во время инициализации Playwright проекта, в файле конфигурации заранее создаются настройки, полезные для запуска на CI:
Из интересного здесь включается механизм ретраев в случае падения тестов. Он нужен для уменьшения количества ложных срабатываний. Такое нередко происходит в e2e-тестах из-за их хрупкости. Вполне вероятно что повторный запуск пройдет хорошо, если, например, первый упал по таймауту.
По умолчанию тесты на CI запускаются на одном воркере. Это снижает скорость выполнения, но дает более высокую предсказуемость результата и меньшее количество плавающих ошибок, когда, то работает, то не работает.
Ускорение запуска
E2E-тесты требуют много ресурсов для запуска и работы, поэтому эти тесты самые медленные среди всех видов тестов. Запуск даже не очень большого набора тестов может занимать минуты и десятки минут. На крупных проектов время доходит до многих часов. В такой ситуации запускать весь набор тестов на каждый коммит не получится. Придется слишком долго ждать.
Этот процесс можно оптимизировать с помощью механизма Fail Fast. В таком случае на каждый коммит будут запускаться только измененные тесты, а не весь набор. Для его включения нужно заменить команду запуска тестов.
Это не на 100% надежный механизм с точки зрения определения того что поменялось, но он достаточен. Полный запуск тестов в любом случае должен происходить, например, на пулреквест или просто по расписанию.
Рекомендуемые программы
Завершено
0 / 15

