🧱 Итерация 5: @Suite
, @ParentSuite
, @SubSuite
, @Layer
— иерархия тестов в Allure
🎯 Цель
Структурировать тесты как сценарии в документации:
по модулям, слоям, группам и уровням ответственности.
Добавим иерархические декораторы, чтобы Allure-отчёт стал навигационным.
🤔 Почему это важно?
Когда тестов становится много, нужно уметь:
- понимать, какой модуль покрыт
- находить конкретные группы тестов
- запускать только
auth
, илиsmoke
, илиe2e
✅ Что добавили
@ParentSuite(name)
— верхний уровень (напр.E2E Тесты
)@Suite(name)
— модуль или раздел (напр.Auth API
)@SubSuite(name)
— подгруппа сценариев (напр.Негативные сценарии
)@Layer(name)
— технический уровень (api
,unit
,e2e
)- Поддержка этих декораторов в
runTest
- Отображение структуры в Allure
📦 Пример
@ParentSuite('E2E Тесты')
@Suite('Auth API')
@SubSuite('Негативные сценарии')
@Layer('api')
@Feature('Авторизация')
@Tag('regression')
@Tag('auth')
@Owner('team-auth')
class AuthNegativeTests {
@TestCase.each([
['user@example.com', 'wrongpass', 401],
['invalid@example.com', '123456', 401],
])('Логин неуспешен для %s')
@Description('Проверка отказа в доступе при неверных данных')
@Tag('login')
@Severity('critical')
@Owner('dmitry.nkt')
async negativeLogin(email: string, password: string, expectedStatus: number) {
const res = await step(`POST /login с ${email}`, () =>
axios.post('https://httpbin.org/status/' + expectedStatus, { email, password }).catch(e => e.response)
)
expect(res.status).toBe(expectedStatus)
}
}
🔍 Как это отображается в Allure
E2E Тесты
└── Auth API
└── Негативные сценарии
└── Логин неуспешен для user@example.com ✅
🧠 Что это даёт
- 🧭 Навигация по модулям
- 📊 Группировка по слоям (
unit
,api
,e2e
) - 🔍 Фильтрация по группам (
@auth
,@smoke
) - 💼 Стандартизация отчётов
- ⚙️ Возможность auto-labeling на CI/CD
🎯 Вывод
Теперь каждый тест — это:
- часть конкретной фичи
- вложен в понятную иерархию
- снабжён техническим и смысловым контекстом
Allure-отчёт стал не просто списком проверок, а живым паспортом системы.
🚀 Что дальше?
В следующей итерации:
- добавим
beforeAll
,afterEach
, глобальные хуки - начнём поддерживать
@Setup
,@Teardown
, возможно —@Inject
иContext