Allure reports

Чем полезны Allure reports и почему хороший отчёт должен помогать расследованию, а не только красиво выглядеть.

Обновлено:

Содержание

Allure Report превращает результаты автотестов в отчёт, где можно изучать сценарии, шаги, параметры и вложения. Его практическая ценность — уменьшить время от красного статуса до понятной причины. Красивые графики сами по себе не делают слабые проверки надёжными.

Важно различать runner, адаптер и генератор отчёта. Pytest или JUnit выполняет тест, адаптер записывает структурированные результаты, а Allure строит представление из этих файлов. Отсутствие отчёта и падение теста являются разными событиями и должны диагностироваться отдельно.

Что должно быть видно читателю

Полезный отчёт отвечает на вопросы: какая сборка проверялась, какое окружение использовалось, какой результат ожидался и что произошло фактически. Для заказа важнее идентификатор операции и ответ сервера, чем десятки шагов «вызвать helper».

Названия должны отражать поведение. «Покупатель не может прочитать чужой заказ» объясняет риск. «test_17» заставляет открывать код. Параметры помогают различить варианты, но случайный технический UUID лучше помещать в диагностические данные, если он не является смыслом кейса.

Пример с Pytest

Для учебного проекта нужны поддерживаемый Python, pytest, allure-pytest и отдельно установленный Allure Report 3 CLI по его инструкции, включая подходящий Node. У Allure 2 и Allure 3 различаются установка и команды: ниже используется Allure 3. Сам адаптер pip не устанавливает полноценный CLI автоматически. Версии адаптера и CLI закрепите в проекте, сверив требования.

Сохраните код как test_report.py. Это самостоятельная демонстрация структуры отчёта на синтетическом объекте, а не проверка реального магазина. В продукте получение заказа заменяется обращением к вашей системе и изолированными тестовыми данными.

python
import json
import allure

@allure.title('Черновик заказа содержит подготовленную сумму')
def test_report_example():
    with allure.step('Подготовить синтетический заказ'):
        order = {'id': 'demo-42', 'status': 'draft', 'total': 9000}
    with allure.step('Приложить безопасные диагностические данные'):
        allure.attach(json.dumps(order), name='order',
                      attachment_type=allure.attachment_type.JSON)
    with allure.step('Проверить ожидаемые значения'):
        assert order['status'] == 'draft'
        assert order['total'] == 9000

После установки адаптера выполните команды ниже. Используйте новую пустую папку результатов для каждого независимого прогона; здесь run-001 обозначает идентификатор примера. Команда generate создаёт отчёт в явно указанной папке, а open запускает локальный просмотр и может оставаться активной до остановки через Ctrl+C.

bash
python -m pip install pytest allure-pytest
python -m pytest test_report.py --alluredir=allure-results-run-001
allure generate allure-results-run-001 -o allure-report-run-001
allure open allure-report-run-001

Ожидается один успешный тест с тремя смысловыми шагами и JSON-вложением. Для учебного расследования измените ожидаемую сумму на 8 000: тест должен упасть на сравнении, а отчёт — показать фактический заказ. После упражнения верните согласованное ожидание.

Шаги должны объяснять действие

Хорошие шаги выделяют важные границы: подготовить корзину, применить купон, прочитать результат. Шаг на каждую техническую строку создаёт шум, а один шаг на весь тест скрывает место отказа. Детализацию выбирают по тому, что поможет расследованию.

Ожидаемое значение должно происходить из требования. Добавление названия шага не делает проверку корректной. Если код сравнивает результат с тем же вычислением, что использует приложение, общая ошибка может дать зелёный отчёт с убедительным, но бесполезным описанием.

Какие вложения сохранять

Для UI полезны screenshot и trace или другой подходящий артефакт инструмента. Для API — очищенный запрос, ответ, статус и correlation id. Для мобильного сценария — версия приложения, устройство и журнал вокруг отказа. Прикладывайте контекст первого существенного нарушения.

Не отправляйте в отчёт пароли, токены, cookie и лишние персональные данные. Маскировку делают до записи, потому что ограничение интерфейса отчёта не удаляет исходные файлы. Размер и срок хранения артефактов тоже требуют политики: бесконечные видео быстро становятся затратными.

Статусы требуют интерпретации

Статус зависит от runner и адаптера. Нарушенное assertion и ошибка подготовки могут отображаться по-разному; изучите правила своей интеграции. Сначала определяют, что именно не выполнено: продуктовый результат, fixture, инфраструктурная операция или генерация отчёта.

Пропущенный тест нельзя считать пройденным. Аналогично успешная повторная попытка не отменяет первоначальный отказ. В релизном решении полезно видеть итог, повторные попытки и причины исключений, иначе визуально благополучный отчёт скрывает потерю контроля.

История и идентичность кейса

Сравнение запусков требует устойчивой идентичности тестов и корректной передачи истории по инструкции выбранной версии Allure. Случайные значения в имени кейса или постоянно меняющаяся структура параметров могут разбить одну проверку на множество разных записей.

История помогает заметить нестабильность и рост длительности, но не объясняет причину автоматически. Изменение времени может быть связано с тестом, стендом или составом данных. Сопоставляйте тренд с версиями приложения и окружения, сохраняя одинаковый смысл сравниваемых запусков.

Интеграция в CI

Сбор результатов и публикация артефактов должны выполняться и после падения теста, если агент ещё способен это сделать. При этом код выхода runner сохраняют: успешная генерация HTML не должна превращать неуспешный тестовый job в зелёный.

Не смешивайте результаты разных сборок в одной папке. Файлы предыдущего прогона могут добавить старые кейсы и создать неверный итог. Обозначайте commit, окружение и время запуска, а ссылку на отчёт размещайте рядом с результатом соответствующего job.

Практическое чтение отказа

Представьте, что API возвращает заказ со статусом draft вместо paid. Сначала откройте точное assertion и безопасный response. Затем сравните ID операции и correlation id с журналом обработки. Если оплата ещё выполняется, проверьте предусмотренное ожидание асинхронного результата; если операция завершилась ошибкой, исследуйте её причину.

Критерий качества отчёта — другой участник команды может начать такое расследование без переписки с автором теста. Если нужный ID отсутствует, полезнее добавить его во вложение, чем ещё один график общей успешности.

Типичные ошибки и выводы

Частые проблемы: stale-файлы результатов, скрытый код выхода, секреты во вложениях и чрезмерная детализация шагов. Отдельная ошибка — путать Allure Report с системой управления тестированием и ожидать от одного HTML-отчёта полный процесс учёта требований.

Allure помогает, когда исходные тесты имеют понятные ожидания и собирают нужные свидетельства. Настраивайте отчёт вокруг расследования и решения команды: что сломалось, насколько результату можно доверять и какое действие требуется дальше.

Что ещё почитать