📖 Теория: Allure Framework

← К оглавлению урока

⚡ Суть: Allure = интерактивные HTML-отчёты для pytest

  • Установка: pip install pytest allure-pytest + CLI: скачать с allurereport.org
  • Запуск: pytest --alluredir=allure-resultsallure 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 CLI команды 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
Эквивалент для Linux/macOS: создайте run.sh с теми же командами, но bash-синтаксисом, и сделайте его исполняемым: chmod +x run.sh.