Запуск по тегам

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


Настройка тегов в тестах

Теги обычно используются вместе с фреймворками Cucumber или Mocha. В случае Cucumber каждый сценарий может содержать тег в формате @имя_тега. Пример:

@smoke
Scenario: Проверка авторизации
  Given пользователь открывает страницу входа
  When он вводит корректные данные
  Then отображается главная страница

Для Mocha можно реализовать теги через специальные комментарии или кастомные функции фильтрации, хотя нативной поддержки нет, и чаще используется библиотека wdio-cucumber-framework или mocha-grep.


Конфигурация WebdriverIO для запуска по тегам

Файл конфигурации wdio.conf.js позволяет указать фильтрацию тестов через опцию cucumberOpts.tagExpression:

exports.config = {
    // другие настройки
    framework: 'cucumber',
    cucumberOpts: {
        require: ['./test/steps/**/*.js'],
        tagExpression: '@smoke and not @wip', // запуск всех тестов с тегом @smoke, кроме @wip
        timeout: 60000
    },
};

Ключевые моменты:

  • @smoke and @regression – запускает тесты, содержащие оба тега.
  • @smoke or @regression – запускает тесты, содержащие хотя бы один из тегов.
  • not @wip – исключает тесты с тегом @wip.

Динамический запуск через CLI

WebdriverIO позволяет переопределять теги прямо при запуске тестов из командной строки. Это удобно для CI/CD, когда нужно запускать разные наборы тестов в зависимости от ветки или окружения:

npx wdio run wdio.conf.js --cucumberOpts.tagExpression="@smoke and not @wip"

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


Группировка и приоритетность тестов

Теги упрощают управление приоритетом тестов. Например, можно разделить тесты на три категории:

  • Smoke-тесты (@smoke) – быстрые проверки основных функций.
  • Regression-тесты (@regression) – полный набор сценариев для проверки стабильности.
  • Work in Progress (@wip) – незавершённые тесты, исключаемые из регулярного запуска.

Такое разделение позволяет в CI запускать только быстрые smoke-тесты при каждом коммите, а regression-тесты – только перед релизом.


Практика комбинирования тегов

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

tagExpression: '(@smoke and @auth) and not @unstable'

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


Тонкости работы с Mocha

Если используется Mocha, можно подключить пакет mocha-grep для имитации тегов:

mochaOpts: {
    ui: 'bdd',
    timeout: 60000,
    grep: '@smoke' // запускает только тесты, содержащие @smoke в описании
}

В тестах это выглядит так:

describe('Авторизация @smoke', () => {
    it('успешный вход с валидными данными', () => {
        // тест
    });
});

grep фильтрует тесты по регулярному выражению, что аналогично тегам в Cucumber, но с меньшей выразительностью.


Интеграция с CI/CD

Использование тегов идеально сочетается с Jenkins, GitLab CI или GitHub Actions. Примеры практического применения:

  • Smoke-тесты запускаются при каждом пулл-реквесте.
  • Regression-тесты запускаются только на ветке main перед деплоем.
  • Тесты с тегом @wip исключаются из всех автоматических прогонов.

Это снижает время выполнения тестов и повышает стабильность сборок.


Вывод

Запуск тестов по тегам в WebdriverIO позволяет структурировать тестовую базу, ускорять процесс проверки и адаптировать автоматизацию под разные сценарии. Грамотное использование тегов обеспечивает эффективное управление тестами и их приоритетностью, делает CI/CD-процессы более гибкими и уменьшает время выполнения автоматизации.