🧬 Итерация 7: @BeforeAll
, @AfterAll
, @Setup(params)
— масштабирование сценариев
🎯 Цель
Добавить поддержку жизненного цикла на уровне класса (@BeforeAll
, @AfterAll
)
и параметризированной подготовки данных (@Setup(params)
).
🧠 Проблема
Когда у нас появляются десятки сценариев:
- многие требуют авторизации (но не хочется логиниться 10 раз)
- каждый сценарий может требовать временных сущностей (юзеры, сессии)
@Setup()
не знает, какие параметры передаются через.each()
✅ Что добавили
@BeforeAll()
— выполняется один раз до всех тестов класса@AfterAll()
— выполняется один раз после всех тестов класса@Setup(params)
— теперь получает параметры из@TestCase.each([...])
📦 Пример
@Context()
ctx!: { email?: string; status?: number; token?: string; log?: string[] }
@BeforeAll()
initSuite() {
this.ctx.log = ['🚀 Начинаем']
}
@AfterAll()
finishSuite() {
this.ctx.log?.push('🏁 Конец')
attach('Лог', this.ctx.log?.join('\n') ?? '', 'text/plain')
}
@Setup()
prepare([email, expectedStatus]) {
this.ctx.email = email
this.ctx.status = expectedStatus
this.ctx.token = email + '-token'
this.ctx.log?.push(`🔧 Подготовка: ${email}`)
}
🤔 А откуда params
в @Setup()
?
Если используется @TestCase.each(...)
, мы передаём параметры прямо в @Setup()
:
@Setup()
prepare([email, status]) { ... } // email и статус приходят из each()
Если используется обычный @TestCase(...)
— @Setup()
вызывается без параметров.
📊 Сравнение с итерацией 6
Жизненный цикл | Для чего | Поведение |
---|---|---|
@Setup() | Подготовка перед каждым | Работает как beforeEach() |
@Setup(params) | Подготовка с параметрами | Работает с .each() |
@BeforeAll() | Общая инициализация | Один раз на весь класс |
@AfterAll() | Завершение, очистка | Один раз после всех |
📌 Что это даёт
- Сокращаем дублирование (
login
,createProject
) - Повышаем читабельность (
@Setup([email, status])
) - Строим классический e2e lifecycle
- Улучшаем Allure-репорты с
attach(log)
🚀 Следующий шаг
@Step()
для методов- Переиспользуемые шаги в стиле Playwright / Serenity