Skip to main content

Scenax: как превратить API-тесты в читаемые сценарии с Vitest и Allure

Что, если бы автотесты читались как сценарий?
Что, если бы каждый шаг был понятен, каждая метка — на месте, а отчёт — пригоден не только для QA, но и для бизнеса?
Так родился Scenax — DSL-фреймворк поверх Vitest и Allure, превращающий тесты в читаемые сценарии.

📑 Структура статьи

  1. Итерация 1: Минимальный DSL для testCase()
  2. Итерация 2: Метки, allureId, feature, severity
  3. Итерация 3: Параметризация @TestCase.each()
  4. Итерация 4: @Suite, @ParentSuite, @Layer
  5. Итерация 5: Классы и runTest()
  6. Итерация 6: Lifecycle — @BeforeAll, @Setup и @Context
  7. Итерация 7: Управление шагами и Step Library
  8. Итерация 8: @Scenario, @Step, вынос шагов в классы
  9. 🛠️ Как scenax вписывается в стек технологий
  10. 🏁 Заключение: почему 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
  • ✍️ Готовую статью для команды или Хабра
  • 🔥 И, возможно, новый взгляд на тестирование

Начнём.