Тегирование сценариев — это механизм, позволяющий группировать тесты и управлять их выполнением на основе заданных условий. В контексте 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();
});
Такая практика позволяет изолировать выполнение важных сценариев и минимизировать побочные эффекты между тестами.
Тегирование тесно связано с построением пайплайнов. Например, можно настроить Jenkins или GitHub Actions для разных наборов тестов:
@smoke — запускаются при каждом коммите для быстрой
проверки.@regression — выполняются только на
nightly-билдах.@critical — запускаются перед релизом.Пример скрипта запуска в CI:
protractor protractor.conf.js --cucumberOpts.tags="@critical"
Before
и After для подготовки и очистки тестовой среды на основе
тегов.@smoke,
@regression, @wip) для упрощения фильтрации и
интеграции.Можно задавать несколько тегов для одного сценария и использовать сложные логические условия при запуске:
@smoke @login @mobile
Scenario: Авторизация на мобильной версии
В конфигурации можно указать:
tags: '(@smoke or @regression) and not @wip'
Такая гибкость позволяет управлять огромными наборами тестов без необходимости создавать отдельные файлы для каждого типа проверки.
Тегирование сценариев в Protractor является мощным инструментом для структурирования тестов, управления их выполнением и интеграции с автоматизированными пайплайнами. Правильная организация тегов повышает эффективность тестирования и упрощает сопровождение большого количества сценариев.