Встроенный HTML-репортер Playwright не показывает пошаговую разбивку, не хранит историю трендов между CI-запусками и не позволяет связать падения с трекером задач. Allure добавляет всё это через адаптер allure-playwright, который записывает сырые результаты для последующей компиляции в интерактивный отчёт с графиками трендов и категориями падений. Здесь разобраны установка, настройка в playwright.config.ts, генерация отчётов локально и интеграция с GitHub Actions.
Что даёт Allure
- Тест-сьюты, организованные по файлу, describe-блоку и названию теста
- Timeline с отображением параллельного выполнения тестов
- Пошаговая разбивка того что произошло в каждом тесте
- Вложения: скриншоты, видео, логи консоли прямо в отчёте
- Тренды: показатели pass/fail по нескольким запускам
- Информация об окружении: какой браузер, ОС, версия приложения тестировались
- Категории: группировка падений по типу (баги продукта, баги тестов, флаки)
Установка
# Устанавливаем адаптер Allure Playwright
npm install -D allure-playwright
# Устанавливаем Allure CLI для генерации и просмотра отчётов
npm install -D allure-commandlineИли устанавливаем Allure CLI глобально:
npm install -g allure-commandlineКонфигурация
Добавляем Allure как репортер в playwright.config.ts:
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [
['list'], // Вывод в консоль во время запуска
['allure-playwright'], // Генерация Allure-отчёта
],
// Опционально: дополнительная конфигурация Allure
// reporter: [
// ['allure-playwright', {
// detail: true,
// outputFolder: 'allure-results',
// suiteTitle: false,
// }],
// ],
});Репортер записывает сырые результаты в allure-results/ во время запуска тестов. Затем из этих результатов генерируется HTML-отчёт.
Запуск и просмотр отчётов
# Запускаем тесты (результаты записываются в allure-results/)
npx playwright test
# Генерируем HTML-отчёт
npx allure generate allure-results --clean -o allure-report
# Открываем в браузере
npx allure open allure-reportИли объединяем генерацию и открытие:
npx allure generate allure-results --clean && npx allure open allure-reportДобавь в package.json для удобства:
{
"scripts": {
"test": "npx playwright test",
"report": "npx allure generate allure-results --clean -o allure-report && npx allure open allure-report"
}
}Затем: npm test && npm run report
Добавление шагов в тесты
Allure показывает пошаговые разбивки если аннотировать код:
import { test, expect } from '@playwright/test';
import { allure } from 'allure-playwright';
test('successful login', async ({ page }) => {
await allure.step('Navigate to login page', async () => {
await page.goto('/login');
});
await allure.step('Enter credentials', async () => {
await page.fill('[data-testid="email"]', 'user@test.com');
await page.fill('[data-testid="password"]', 'ValidPass1');
});
await allure.step('Submit login form', async () => {
await page.click('[data-testid="submit"]');
});
await allure.step('Verify redirect to dashboard', async () => {
await expect(page).toHaveURL('/dashboard');
await expect(page.getByTestId('welcome')).toBeVisible();
});
});В Allure-отчёте каждый шаг отображается отдельно со статусом pass/fail.
Добавление метаданных
Аннотируй тесты метаданными для удобной организации и фильтрации:
test('payment with valid card', async ({ page }) => {
// Метки для фильтрации и группировки
allure.label('feature', 'Checkout');
allure.label('story', 'Credit card payment');
allure.severity('critical'); // 'blocker' | 'critical' | 'normal' | 'minor' | 'trivial'
allure.owner('qa-team');
// Ссылки на задачи и тест-кейсы
allure.issue('PROJ-123', 'https://jira.mycompany.com/PROJ-123');
allure.tmsLink('TC-456', 'https://testrail.mycompany.com/TC-456');
// Описание
allure.description('Verify that valid Stripe test card completes purchase');
// Теги
allure.tag('smoke');
allure.tag('payment');
// ... код теста
});Вложение скриншотов и файлов
import { allure } from 'allure-playwright';
import * as fs from 'fs';
test('verifies page layout', async ({ page }) => {
await page.goto('/dashboard');
// Прикрепляем скриншот вручную
const screenshot = await page.screenshot();
await allure.attachment('Dashboard screenshot', screenshot, 'image/png');
// Прикрепляем текстовый файл
const logContent = 'Test started at: ' + new Date().toISOString();
await allure.attachment('Test log', Buffer.from(logContent), 'text/plain');
// Прикрепляем JSON-данные
const apiResponse = { status: 'ok', users: 42 };
await allure.attachment(
'API response',
Buffer.from(JSON.stringify(apiResponse, null, 2)),
'application/json'
);
});Скриншоты при падении прикрепляются автоматически если настроено в playwright.config.ts:
use: {
screenshot: 'only-on-failure',
video: 'retain-on-failure',
}Информация об окружении
Добавляй детали окружения чтобы в отчёте было видно что тестировалось:
// В playwright.config.ts или global setup
// Создаём файл allure-results/environment.properties
// global-setup.ts
import * as fs from 'fs';
import * as path from 'path';
export default async function globalSetup() {
const envProps = [
`BASE_URL=${process.env.BASE_URL || 'http://localhost:3000'}`,
`ENV=${process.env.TEST_ENV || 'local'}`,
`BROWSER=chromium`,
`APP_VERSION=${process.env.APP_VERSION || 'unknown'}`,
].join('\n');
fs.mkdirSync('allure-results', { recursive: true });
fs.writeFileSync(path.join('allure-results', 'environment.properties'), envProps);
}Это отображается в разделе Environment Allure-отчёта.
Конфигурация категорий
Категории группируют падения тестов по типу. Создай allure-results/categories.json:
[
{
"name": "Product Bugs",
"messageRegex": ".*Expected.*",
"matchedStatuses": ["failed"]
},
{
"name": "Test Infrastructure Issues",
"messageRegex": ".*net::ERR.*|.*Navigation timeout.*|.*Connection refused.*",
"matchedStatuses": ["failed", "broken"]
},
{
"name": "Test Flakiness",
"matchedStatuses": ["flaky"]
}
]Allure автоматически категоризирует падения по паттернам сообщений об ошибках.
Интеграция с CI/CD
GitHub Actions
- name: Run Playwright tests
run: npx playwright test
- name: Generate Allure report
if: always()
run: npx allure generate allure-results --clean -o allure-report
- name: Upload Allure report
uses: actions/upload-artifact@v4
if: always()
with:
name: allure-report
path: allure-report/
retention-days: 30
- name: Upload raw results (for trend data)
uses: actions/upload-artifact@v4
if: always()
with:
name: allure-results
path: allure-results/Allure TestOps (облачная версия)
Для постоянной истории трендов между CI-запусками Allure TestOps (платный сервис) хранит результаты централизованно. Бесплатная альтернатива: загружай артефакты allure-results из предыдущих запусков и включай их в следующую команду allure generate.
Playwright Report vs Allure
| Функция | Playwright HTML | Allure |
|---------|----------------|--------|
| Требуется настройка | Нет | Установка + шаг генерации |
| Пошаговая разбивка | Нет | Да (с аннотациями) |
| История трендов | Нет | Да |
| Категории | Нет | Да (настраиваемые) |
| Ссылки на внешние инструменты | Нет | Да (Jira, TestRail) |
| Лучше подходит для | Быстрое ежедневное использование | Отчёты для стейкхолдеров, история CI |
Встроенный отчёт Playwright используй локально для быстрой обратной связи. Allure в CI подходит для постоянной истории и отчётности для стейкхолдеров.
Итог
# Установка
npm install -D allure-playwright allure-commandline
# Конфигурация в playwright.config.ts
reporter: [['allure-playwright']]
# Запуск, генерация, просмотр
npx playwright test
npx allure generate allure-results --clean
npx allure open allure-reportКлючевые возможности для использования:
allure.step()для читаемой разбивки тестаallure.severity()и метки для фильтрацииallure.issue()для связи падений с трекером задач- Свойства окружения для документирования что тестировалось
Allure наиболее ценен когда результаты тестов нужно показывать разработчикам и продакт-менеджерам которым важно понять что упало и почему: визуальный формат передаёт больше, чем список названий тестов.
→ See also: Отчёты тестов Playwright: встроенный HTML против Allure | Отчёты о тестах в CI: форматы, инструменты и интеграция | GitHub Actions для тестов Playwright: полная настройка (2026)