Что такое Allure?
Allure — это open-source фреймворк отчётности, превращающий сырые результаты тестов в богатые интерактивные HTML-отчёты. В то время как большинство фреймворков дают базовые подсчёты pass/fail, Allure создаёт детальные отчёты с шагами тестов, скриншотами, сетевыми логами, таймлайнами выполнения, историческими трендами и категоризированными падениями.
Allure интегрируется практически со всеми основными тест-фреймворками: JUnit, TestNG, Pytest, Jest, Mocha, Playwright, Cypress и другими. Он работает в два этапа: сначала тесты генерируют файлы результатов Allure при выполнении; затем CLI Allure генерирует HTML-отчёт из этих файлов.
Зачем использовать Allure?
Стандартные отчёты отвечают на один вопрос: сколько тестов прошло? Allure отвечает на многие:
- Что именно сделал каждый тест? Пошаговое выполнение со скриншотами
- Почему он упал? Категоризированные падения со стек-трейсами и вложенными доказательствами
- Это новое падение или известная проблема? Исторические тренды и обнаружение нестабильных тестов
- Какие функции затронуты? Тесты организованы по feature, story и серьёзности
Настройка Allure
Установка
# macOS
brew install allure
# npm (кроссплатформенный)
npm install -g allure-commandline
Java (JUnit 5 + Maven)
<dependency>
<groupId>io.qameta.allure</groupId>
<artifactId>allure-junit5</artifactId>
<version>2.25.0</version>
<scope>test</scope>
</dependency>
Python (Pytest)
pip install allure-pytest
pytest --alluredir=allure-results
Аннотации Allure
Шаги
@Test
@Description("Проверить логин с валидными учётными данными")
@Severity(SeverityLevel.CRITICAL)
@Feature("Аутентификация")
@Story("Логин")
public void testSuccessfulLogin() {
openLoginPage();
enterCredentials("admin@example.com", "password123");
clickLoginButton();
verifyDashboardDisplayed();
}
@Step("Открыть страницу логина")
public void openLoginPage() {
driver.get(baseUrl + "/login");
}
@Step("Ввести учётные данные: {email}")
public void enterCredentials(String email, String password) {
driver.findElement(By.id("email")).sendKeys(email);
driver.findElement(By.id("password")).sendKeys(password);
}
Вложения
@Attachment(value = "Скриншот", type = "image/png")
public byte[] takeScreenshot() {
return ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES);
}
Серьёзность и метки
@Severity(SeverityLevel.BLOCKER)
@Feature("Корзина покупок")
@Story("Добавить в корзину")
@Epic("E-Commerce")
@Owner("qa-team")
@Link(name = "JIRA-1234", url = "https://jira.example.com/JIRA-1234")
Генерация отчётов
# Сгенерировать и открыть отчёт
allure serve allure-results
# Сгенерировать отчёт в директорию
allure generate allure-results -o allure-report --clean
Разделы отчёта
Главный дашборд
- Подсчёты Pass/Fail/Broken/Skipped и проценты
- Разбивка по серьёзности всех тестов
- Покрытие функций
- Тренд длительности выполнения тестов
- Категории сгруппированных причин падений
Представления Suites и Behaviors
- Suites: Тесты по классам и пакетам (техническое представление)
- Behaviors: Тесты по Epic > Feature > Story (бизнес-представление)
Конфигурация категорий
[
{
"name": "Дефекты продукта",
"matchedStatuses": ["failed"],
"messageRegex": ".*AssertionError.*"
},
{
"name": "Проблемы инфраструктуры",
"matchedStatuses": ["broken"],
"messageRegex": ".*TimeoutException.*|.*ConnectionRefused.*"
}
]
Allure в CI/CD
- name: Запуск тестов
run: mvn test
continue-on-error: true
- name: Генерация отчёта Allure
uses: simple-elf/allure-report-action@master
with:
allure_results: target/allure-results
Пример на Python (Pytest)
import allure
@allure.feature("Аутентификация")
@allure.story("Логин")
@allure.severity(allure.severity_level.CRITICAL)
def test_successful_login(page):
with allure.step("Открыть страницу логина"):
page.goto("/login")
with allure.step("Ввести учётные данные"):
page.fill("#email", "admin@example.com")
page.fill("#password", "password123")
with allure.step("Отправить форму"):
page.click("#submit")
with allure.step("Проверить дашборд"):
assert page.text_content(".welcome") == "Welcome, Admin"
allure.attach(page.screenshot(), name="Скриншот", attachment_type=allure.attachment_type.PNG)
Упражнения
Упражнение 1: Настройка Allure
Добавьте зависимости Allure в существующий проект, аннотируйте 5 тестов с @Step, @Feature, @Story и @Severity, сгенерируйте отчёт и изучите каждый раздел.
Упражнение 2: Категории и история
Создайте файл categories.json, запустите тесты дважды с историей для графиков трендов, определите самый долгий тест через Timeline.
Упражнение 3: Интеграция CI/CD
Добавьте генерацию отчётов Allure в CI-пайплайн, настройте отслеживание исторических трендов, настройте публикацию отчётов доступных по URL.