📖 Теория: Allure Framework
⚡ Суть: Allure = интерактивные HTML-отчёты для pytest
- Установка:
pip install pytest allure-pytest+ CLI: скачать с allurereport.org - Запуск:
pytest --alluredir=allure-results→allure serve allure-results - Разметка:
@allure.epic / feature / story / title / severityгруппируют тесты в отчёте - Шаги:
with allure.step("..."):— видны в дереве отчёта, помогают найти место ошибки - @allure.step на методе: метод становится шагом автоматически при каждом вызове
- Вложения:
allure.attach(sql, "SQL", allure.attachment_type.TEXT)
Allure Framework — что это и зачем
Allure Framework — инструмент с открытым исходным кодом для генерации интерактивных и наглядных HTML-отчётов по результатам автоматизированного тестирования. При использовании совместно с pytest он предоставляет мощные возможности визуализации и анализа выполненных тестов, существенно облегчая интерпретацию результатов и диагностику проблем.
Основные возможности Allure
Визуализация результатов тестирования
- Интерактивные диаграммы, графики и статусные индикаторы.
- Цветовая индикация статусов прохождения тестов (успешно, неуспешно, пропущено и т.д.).
Детализация результатов
- Просмотр логов, прикреплённых файлов, скриншотов и другой дополнительной информации.
- Подробное описание шагов выполнения теста в виде дерева.
Категоризация и маркировка тестов
- Возможность группировки тестов по фичам, историям (stories), эпикам (epics), а также по пользовательским меткам.
История запусков
- Сравнение результатов текущего и предыдущих запусков тестов, отображение динамики изменений.
Установка и запуск Allure с pytest
Шаг 1 — Установить Python-пакеты
# requirements.txt или командная строка
pip install pytest allure-pytest
Шаг 2 — Установить Allure CLI
Allure CLI — отдельное Java-приложение. Устанавливается независимо от pip:
- Windows (Scoop):
scoop install allure - macOS (Homebrew):
brew install allure - Linux: скачать архив с GitHub Releases и прописать путь в PATH
allure serve и allure generate не работают. Только pip install allure-pytest недостаточно — он лишь генерирует сырые JSON-данные для CLI.
Шаг 3 — Запустить тесты с записью результатов
# pytest сохранит результаты в папку allure-results
pytest --alluredir=allure-results
Шаг 4 — Открыть отчёт
# Запустить локальный веб-сервер и открыть отчёт в браузере
allure serve allure-results
Генерация статического отчёта
# Сгенерировать HTML в папку allure-report
allure generate allure-results -o allure-report --clean
# Открыть уже сгенерированный отчёт
allure open allure-report
Папку allure-report можно передать коллеге — он откроет index.html вручную или командой allure open allure-report.
Разметка тестов декораторами Allure
Allure поддерживает специальные декораторы, позволяющие группировать тесты в отчётах по смысловым признакам.
Список признаков
| Декоратор | Назначение | Пример |
|---|---|---|
@allure.id | Уникальный ID теста (для читаемости кода) | @allure.id("ITCH-1") |
@allure.epic | Принадлежность к проекту/модулю верхнего уровня | @allure.epic("компании") |
@allure.feature | Фича — тип операции (CRUD) | @allure.feature("READ") |
@allure.story | Пользовательская история | @allure.story("Получение списка компаний") |
@allure.title | Название теста в отчёте | @allure.title("Получение полного списка организаций") |
@allure.description | Подробное описание | @allure.description("Запрос с параметром active=true") |
@allure.severity | Уровень критичности | @allure.severity("blocker") |
Рекомендации по применению
- Декораторы можно вешать в любом порядке.
- Общие для группы тестов декораторы (
@allure.epic,@allure.severity) рекомендуется выносить на уровень класса. @allure.idне отображается в самом отчёте Allure — используется исключительно для удобства навигации в коде.
Шаги (steps) в Allure
Анализировать сложные и длинные тесты бывает трудно, особенно если они завершились ошибкой: не всегда очевидно, на каком этапе возникла проблема. Для удобства анализа тесты разделяют на шаги при помощи конструкции allure.step. В отчёте шаги отображаются в виде дерева — это позволяет сразу видеть, где именно произошла ошибка.
Простые шаги
import allure
def test_one():
with allure.step("Шаг 1: подготовка данных"):
# тело шага
pass
with allure.step("Шаг 2: выполнение действия"):
pass
with allure.step("Шаг 3: проверка результата"):
assert True
Вложенные шаги
Шаги могут быть вложенными — полезно для сложных операций, состоящих из подшагов:
with allure.step("Создать организацию"):
with allure.step("Сгенерировать название"):
name = "Autotest"
with allure.step("Вызвать API-метод для создания"):
result = api.create_company(name)
@allure.step на методах класса
Чтобы не дублировать шаги во всех тестах, удобно декорировать сами методы API-класса. Тогда Allure автоматически покажет каждый вызов как шаг — со всеми переданными параметрами.
# api/company_api.py
import allure
import requests
class CompanyApi:
def __init__(self, url):
self.url = url
@allure.step("api. Получить список компаний")
def get_company_list(self, params_to_add=None):
# реализация метода
pass
@allure.step("api. Создать компанию")
def create_company(self, name, description=""):
# реализация метода
pass
Динамические параметры в названиях шагов
В строке шага можно указать имя параметра в фигурных скобках — Allure автоматически подставит его значение:
# db/company_table.py
@allure.step("БД. Запросить организацию по {id}")
def get_company_by_id(self, id):
# Allure покажет: "БД. Запросить организацию по 42"
pass
@allure.step("api. Создать компанию '{name}' ({description})")
def create_company(self, name, description=""):
# Allure покажет: "api. Создать компанию 'Autotest' (Описание)"
pass
Это делает отчёт значительно информативнее — видно, с какими конкретными данными работал каждый шаг.
Вложения (attachments) в отчётах Allure
Allure позволяет прикреплять к отчёту дополнительные материалы: SQL-запросы, скриншоты, текстовые логи, JSON-ответы.
Синтаксис
allure.attach(content, name="Заголовок вложения", attachment_type=allure.attachment_type.TEXT)
| Параметр | Описание |
|---|---|
content | Содержимое вложения (строка, байты) |
name | Заголовок, который будет показан в отчёте |
attachment_type | Тип: TEXT, PNG, JSON, HTML, CSV и др. |
Пример: прикрепить SQL-запрос
# db/company_table.py
import allure
from sqlalchemy import create_engine
from sqlalchemy.sql import text
class CompanyTable:
__scripts = {
"select": "select * from company",
}
def __init__(self, connection_string):
self.__db = create_engine(connection_string).connect()
@allure.step("БД. Запросить список организаций")
def get_companies(self):
query = self.__db.execute(self.__scripts["select"])
sql_query = str(query.context.cursor.query)
allure.attach(sql_query, "SQL-запрос на получение списка компаний",
allure.attachment_type.TEXT)
return query.fetchall()
Пример: прикрепить скриншот
# tests/test_example.py
import allure
def test_with_screenshot():
with open("screenshot.png", "rb") as f:
allure.attach(f.read(), name="Снимок экрана",
attachment_type=allure.attachment_type.PNG)
Автоматизация прогона и генерации отчёта
Для удобства можно создать PowerShell-скрипт, который автоматически запускает тесты и генерирует отчёт.
Скрипт run.ps1 (Windows/PowerShell)
# run.ps1
$results = "allure-results"
$report = "allure-report"
# Очистить предыдущие результаты
if (Test-Path $results) { Remove-Item -Recurse -Force $results }
if (Test-Path $report) { Remove-Item -Recurse -Force $report }
# Запустить тесты и собрать данные для Allure
pytest --alluredir=$results
# Сгенерировать HTML-отчёт
allure generate $results -o $report --clean
# Открыть отчёт в браузере
allure open $report
run.sh с теми же командами, но bash-синтаксисом, и сделайте его исполняемым: chmod +x run.sh.