Scenax: как превратить API-тесты в читаемые сценарии с Vitest и Allure
Что, если бы автотесты читались как сценарий?
Что, если бы каждый шаг был понятен, каждая метка — на месте, а отчёт — пригоден не только для QA, но и для бизнеса?
Так родился Scenax — DSL-фреймворк поверх Vitest и Allure, превращающий тесты в читаемые сценарии.
📑 Структура статьи
- Итерация 1: Минимальный DSL для
testCase()
- Итерация 2: Метки,
allureId
,feature
,severity
- Итерация 3: Параметризация
@TestCase.each()
- Итерация 4:
@Suite
,@ParentSuite
,@Layer
- Итерация 5: Классы и
runTest()
- Итерация 6: Lifecycle —
@BeforeAll
,@Setup
и@Context
- Итерация 7: Управление шагами и Step Library
- Итерация 8:
@Scenario
,@Step
, вынос шагов в классы - 🛠️ Как
scenax
вписывается в стек технологий - 🏁 Заключение: почему
scenax
— это новый стандарт
🤯 Проблема
Современные инструменты автотестирования мощны — но требуют дисциплины и ручной работы:
vitest.test()
хорош для unit-проверок, но не подходит для сценариев с шагами и контекстом- Метки (
feature
,severity
,tag
,owner
) задаются вручную, легко ошибиться - Шаги через
allure.step(...)
— не типизированы, не читаемы, не переиспользуемы - Нет архитектуры: шаги дублируются, контекст передаётся вручную
В итоге тесты теряют читаемость и перестают быть документацией. Вместо сценария — каша из кода.
💡 Идея
Мы хотим, чтобы тест выглядел как намерение, а не как реализация.
testCase(
'Создание пользователя',
{ id: 'API-001', feature: 'Users', severity: 'critical' },
async () => {
const response = await step('POST /users', () =>
axios.post('/users', { name: 'Иван' })
)
attach('Ответ', response.data, 'application/json')
expect(response.status).toBe(201)
}
)
Это не просто автотест. Это сценарий. Это документ, понятный и разработчику, и аналитику, и бизнесу.
🚀 Что такое Scenax?
Scenax — это:
Scenax — это:
- DSL (язык сценариев) поверх Vitest + Allure
- Class-based архитектура: тесты = сценарии, методы = шаги
- Декораторы: @TestCase, @Feature, @Step, @Context и др.
- Переиспользуемые шаги и сценарные классы
- Поддержка параметризации, lifecycle, иерархии
- Чистые отчёты Allure — без ручного label/step/attach
📚 О чём эта статья
Мы покажем путь — от простого DSL до полноценного архитектурного подхода.
Каждая итерация будет:
- Давать реальный value (шаг за шагом)
- Содержать читаемый код
- Подкрепляться живыми примерами
В финале вы получите:
- 📦 Переиспользуемую библиотеку
scenax
- 💻 Открытый репозиторий на GitHub
- ✍️ Готовую статью для команды или Хабра
- 🔥 И, возможно, новый взгляд на тестирование
Начнём.