Python: Selenium
Теория: Отчёты и CI
Allure делает HTML-отчёты по тестам: шаги, статусы, вложения. Плагин allure-pytest позволяет Pytest записывать результаты в формат Allure. Утилита allure превращает результаты в HTML.
Настройка делится на два этапа:
- в проекте — установка
allure-pytestи добавление вложений; - в CI — запуск тестов, сбор результатов и публикация HTML-отчёта.
Установка зависимостей
Сначала устанавливается плагин для Pytest и утилита для сборки HTML-отчёта. Плагин allure-pytest добавляется через uv add — так зависимость попадает в pyproject.toml. Утилита allure — это отдельный бинарный инструмент, который устанавливается системно: через пакетный менеджер ОС, дистрибутив или контейнер.
Пример установки плагина:
Вариант через pipx:
Проверка установки CLI:
Если команда отсутствует, CLI ставится штатным способом для ОС или используется контейнер allure-commandline. Установка выполняется один раз.
Базовый запуск и каталог результатов
Pytest сохраняет сырые результаты в выбранный каталог, а утилита allure строит из них HTML-отчёт. Каталог с результатами и каталог с HTML-разметкой разделяются: по умолчанию используют allure-results и allure-report.
Пример запуска:
Флаг --clean удаляет старое содержимое папки allure-report перед сборкой. Команда serve собирает отчёт и запускает временный веб-сервер для локального просмотра.
Метаданные тестов: фичи, истории, severity
Allure позволяет подписывать тесты понятными метками: к чему относится тест, что он проверяет, насколько он важен. Эти подписи ставятся прямо над тестом через декораторы. В отчёте они видны как заголовки и помогают быстро ориентироваться.
Пример:
feature— к какой части приложения относится тест (здесь: авторизация);story— что именно он проверяет (успешный вход);severity— насколько тест важный.
Шаги внутри теста (with allure.step(...)) разбивают выполнение на понятные действия. В отчёте это становится списком: «Открыть страницу», «Ввести логин и пароль», «Проверить результат». Если тест падает, видно на каком шаге остановилось.
То есть Allure не просто показывает «тест упал», а показывает, что делал тест и на каком действии ошибка.
Вложения: скриншоты, DOM, логи браузера
При падении теста Allure может прикреплять данные из браузера. Это выполняется один раз в conftest.py. Хук проверяет статус выполнения и при ошибке получает driver. В отчёт добавляется скриншот, HTML текущей страницы и по возможности логи консоли браузера.
Успешные тесты не затрагиваются. В отчёт попадает только информация с неуспешных запусков.
Конфигурация Pytest для единых правил
Общие параметры Pytest выносят в pytest.ini. Так сокращается команда запуска и одинаковый вывод гарантируется во всех средах.
Если нужно, чтобы результаты Allure писались всегда, в addopts добавляют --alluredir=allure-results. В CI этот параметр обычно передаётся прямо в шаге запуска.
Интеграция в GitHub Actions: артефакт и публикация
В CI это делается в два шага.
Сначала запускаются тесты и сохраняются результаты Allure в папку allure-results. Эти файлы загружаются как артефакт — чтобы второй шаг мог их забрать.
Потом создаётся отдельный шаг, который скачивает эти результаты и собирает из них HTML-отчёт. Для сборки используется готовый контейнер, внутри которого есть команда allure. После сборки папка allure-report загружается как артефакт. Её можно скачать прямо из интерфейса GitHub Actions. При желании можно сразу выкладывать отчёт на GitHub Pages.
Пример простого варианта в GitHub Actions:
То есть логика такая: тесты → результат сохранился → другой шаг собрал отчёт → отчёт можно скачать.
Интеграция в GitLab CI: кэши и артефакты
Логика такая же, как в GitHub Actions: тесты пишут результаты, отдельный шаг собирает HTML и прикрепляет его к пайплайну.
В результате отчет лежит как артефакт, его можно открыть прямо в GitLab.
Allure умеет показывать информацию об окружении. Если в allure-results есть файл environment.properties, отчет отображает значения: на каком стенде шли тесты, какой браузер, была ли голова, какая версия сборки.
Простейший файл:
Файл можно положить руками или сформировать автоматически. Пример фикстуры, которая создаёт его перед запуском:
После сборки отчёта параметры отображаются в интерфейсе Allure.
Параллельные прогоны и истории
Если тесты в CI запускаются параллельно, результаты можно собрать в одну папку и потом сделать общий отчёт. Каждый джоб выгружает allure-results, а перед генерацией HTML эти папки объединяются. В итоге отчёт получается один.
Чтобы появились графики и история, Allure читает папку history. Её можно брать из предыдущего отчёта. Достаточно сохранять allure-report/history как артефакт и копировать его в allure-results перед сборкой. Тогда новый отчёт покажет тренды и повторяющиеся падения.
Генерация отчётов с шагами, скриншотами и логами
Allure собирает «сырые» результаты во время прогона Pytest и превращает их в отчёт со структурой сценария. Чтобы в отчёте появились шаги, в тестах используют контекстный менеджер allure.step. Каждый такой блок виден как отдельная строка сценария с временем и статусом. Простейший тест фиксирует три шага: открытие страницы, ввод данных и проверка результата.
Скриншоты и DOM удобнее прикладывать автоматически при падении. Это делает хук pytest_runtest_makereport: он срабатывает после вызова теста и видит, завершился ли он неуспешно. Если да, драйвер делает снимок экрана, HTML сохраняется целиком, а для Chrome дополнительно собираются логи консоли. Такой подход избавляет от копипасты try/except в каждом тесте.
Если проект использует Page Object, удобно прикладывать артефакты в самих методах шагов. Базовая страница оборачивает ключевые действия в шаги Allure и умеет добавлять скриншот на критичных операциях. Так в отчёте видна «дорожка» из кликов и вводов, а на неуспехе остаётся состояние экрана именно в нужный момент.
Для ручного вложения артефактов в конкретном тесте достаточно вызвать allure.attach. Это полезно, когда нужно приложить бизнес-данные шага: JSON ответа API, расчётные параметры, текст всплывающего сообщения.
Иногда требуется всегда сохранять «чистовые» артефакты успешных кейсов, например, скриншот после покупки или финальный DOM формы. В таких точках вложение делается прямо в тесте или методе страницы, независимо от статуса. Это не стоит применять повсеместно, чтобы не раздувать отчёт, но для контрольных шагов это оправдано.
Чтобы отчёт группировался по функциям системы, тесты размечаются фичами, историями и критичностью. Эти атрибуты читаются прямо в интерфейсе Allure и помогают фильтровать сценарии. Разметку удобно ставить на уровне тестов или модулей, а общие теги можно подвесить через Pytest-марки и сконвертировать в Allure в фикстуре, если команда так договорилась.
Генерация отчёта состоит из двух команд: Pytest записывает результаты с --alluredir, утилита allure собирает HTML. Каталоги для «сырья» и отчёта не пересекаются.
Такой набор даёт полный след прогона: шаги видны по порядку, скриншоты и DOM приложены на падениях, логи консоли помогают отличить баг фронтенда от ошибки теста. В результате воспроизведение проблемы занимает меньше времени, а сами тесты остаются чистыми, потому что вся рутинная сборка артефактов спрятана в хуке и базовых методах.
Интеграция с GitHub Actions
Цель пайплайна проста: установить ��ависимости, запустить Pytest с --alluredir, сохранить «сырые» результаты и собрать HTML-отчёт. В рабочем варианте первый джоб прогоняет тесты и выгружает allure-results как артефакт, второй джоб генерирует HTML в allure-report и тоже сохраняет его как артефакт.
Матрица браузеров позволяет прогнать один и тот же набор в нескольких средах. Каждая ячейка матрицы пишет свой allure-results, а второй джоб объединяет их перед сборкой отчёта.
Публикация отчёта на GitHub Pages делается отдельным шагом. Генерация HTML остаётся в CI, после чего содержимое папки allure-report деплоится в ветку gh-pages.
Для Selenium Grid или Selenoid достаточно прокинуть переменные и использовать удалённый command_executor. Агент Actions не меняется, тесты подключаются к гриду по URL.
Интеграция с Jenkins
Jenkins решает ту же задачу стадиями пайплайна. Удобно использовать виртуальное окружение, сохранять allure-results как артефакт и публиковать отчёт через плагин Allure.
Если в пайплайне параллельные ветки, каждая ветка складывает свои allure-results в уникальную папку и делает stash. Финальная стадия Allure Report делает unstash всех наборов в общий каталог и публикует один отчёт.
Подключение удалённого Selenium в Jenkins не отличается от локального запуска. Драйвер создаётся с command_executor из переменной окружения, а ноды Jenkins могут одновременно держать несколько браузеров, если хватает ресурсов.
Отдача статического HTML-отчёта без плагина делается через publishHTML. Этот вариант пригодится в минимальной инсталляции, где плагин Allure недоступен.
Для стабильности в обоих CI удобно фиксировать одинаковый размер окна, headless-режим и уникальные каталоги артефактов в фикстуре driver. Тогда локальный запуск и агент в пайплайне ведут себя одинаково, а отчёты всегда содержат шаги, скриншоты, DOM и логи браузера из хуков Pytest.
Хранение и просмотр Allure-отчётов в CI
Allure формирует два вида данных: сырые результаты и HTML-отчёт.
В CI сохраняют оба: результаты нужны для пересборки и объединения параллельных прогонов, HTML — для просмотра.
Правильная схема такая: на этапе тестов Pytest пишет результаты в каталог, CI сохраняет его как артефакт, затем отдельный шаг собирает HTML из этого каталога и публикует статический сайт или прикрепляет архив отчёта к сборке.


