Тегирование сценариев

Тегирование сценариев — это механизм, позволяющий группировать тесты и управлять их выполнением на основе заданных условий. В контексте Protractor, который использует фреймворк Jasmine или Cucumber для описания тестов, теги помогают организовать тестовый набор, выделять критические сценарии, а также интегрировать тестирование с CI/CD пайплайнами.


Основы тегирования

В Protractor с Cucumber теги задаются через специальную аннотацию @тег перед описанием сценария или набора сценариев в .feature файле. Например:

@smoke
Feature: Проверка авторизации

  @critical
  Scenario: Успешный вход в систему
    Given пользователь открывает страницу логина
    When он вводит корректные учетные данные
    Then система позволяет войти в личный кабинет

В этом примере:

  • @smoke применён к всей функциональности (Feature), что автоматически распространяет тег на все сценарии внутри.
  • @critical применяется к конкретному сценарию.

Теги могут комбинироваться, создавая сложные правила фильтрации:

@smoke @login
Scenario: Вход с валидными данными

Фильтрация сценариев по тегам

Protractor позволяет запускать тесты, отфильтрованные по тегам, с помощью параметра cucumberOpts.tags в конфигурационном файле protractor.conf.js. Примеры использования:

cucumberOpts: {
  require: ['steps/**/*.js'],
  tags: '@smoke and not @wip',
  format: 'json:reports/results.json'
}

Разбор:

  • @smoke and not @wip — выполняются только сценарии с тегом @smoke, исключая помеченные как @wip.

  • Операторы для комбинирования тегов:

    • and — логическое И.
    • or — логическое ИЛИ.
    • not — отрицание тега.

Фильтрация по тегам позволяет строить гибкие стратегии выполнения тестов: запускать критические сценарии перед деплоем, smoke-тесты для быстрого контроля стабильности, или полностью исключать сценарии в стадии разработки.


Управление тегами на уровне кода

В файлах шагов (step definitions) теги могут использоваться для создания условной логики. Например, в Cucumber для Node.js можно применять хуки Before и After с фильтрацией по тегам:

const { Before, After } = require('@cucumber/cucumber');

Before({ tags: '@critical' }, async function () {
  // подготовка данных только для критических сценариев
  await browser.get('https://example.com/login');
});

After({ tags: '@critical' }, async function () {
  // очистка состояния после критических тестов
  await browser.manage().deleteAllCookies();
});

Такая практика позволяет изолировать выполнение важных сценариев и минимизировать побочные эффекты между тестами.


Применение тегов для CI/CD

Тегирование тесно связано с построением пайплайнов. Например, можно настроить Jenkins или GitHub Actions для разных наборов тестов:

  • @smoke — запускаются при каждом коммите для быстрой проверки.
  • @regression — выполняются только на nightly-билдах.
  • @critical — запускаются перед релизом.

Пример скрипта запуска в CI:

protractor protractor.conf.js --cucumberOpts.tags="@critical"

Рекомендации по тегированию

  1. Группировка по бизнес-ценности: выделять критические и менее важные сценарии.
  2. Комбинирование тегов: избегать перегруженности, оставляя логичные комбинации.
  3. Использование хуков: применять Before и After для подготовки и очистки тестовой среды на основе тегов.
  4. Единообразие в названиях: придерживаться стандартизированных тегов (@smoke, @regression, @wip) для упрощения фильтрации и интеграции.

Поддержка нескольких тегов и сценариев

Можно задавать несколько тегов для одного сценария и использовать сложные логические условия при запуске:

@smoke @login @mobile
Scenario: Авторизация на мобильной версии

В конфигурации можно указать:

tags: '(@smoke or @regression) and not @wip'

Такая гибкость позволяет управлять огромными наборами тестов без необходимости создавать отдельные файлы для каждого типа проверки.


Тегирование сценариев в Protractor является мощным инструментом для структурирования тестов, управления их выполнением и интеграции с автоматизированными пайплайнами. Правильная организация тегов повышает эффективность тестирования и упрощает сопровождение большого количества сценариев.