Cypress предоставляет гибкий механизм организации тестов с помощью тегов и категорий, что позволяет эффективно управлять большими наборами тестов, облегчает параллельное выполнение и фильтрацию при прогоне только определённых сценариев.
В Cypress тесты структурируются с помощью функций
describe и it.
describe('Авторизация пользователя', () => {
it('Успешный вход с корректными данными', () => {
// тестовый сценарий
});
it('Попытка входа с неверным паролем', () => {
// тестовый сценарий
});
});
describe группирует тесты в блоки, а it
описывает отдельные сценарии. Стандартная структура удобна, но при росте
проекта появляется необходимость фильтрации тестов по признакам,
например, «smoke», «regression», «critical».
Cypress напрямую не поддерживает теги как в некоторых фреймворках
(например, Cucumber), но их можно реализовать через атрибуты или
кастомные комментарии, совместимые с плагинами типа
cypress-grep.
Пример с cypress-grep:
describe('Авторизация пользователя', { tags: ['smoke', 'login'] }, () => {
it('Успешный вход с корректными данными', { tags: ['critical'] }, () => {
// тест
});
it('Попытка входа с неверным паролем', { tags: ['regression'] }, () => {
// тест
});
});
Ключевые моменты:
tags добавляются к блокам describe и
it.cypress-grep позволяет запускать тесты с
фильтром по тегу:npx cypress run --env grepTags=smoke
Это выполнит только тесты, помеченные тегом smoke.
По типу теста:
По функциональным модулям: Разделение на группы по страницам или модулям приложения:
describe('Модуль корзины', { tags: ['cart'] }, () => {
it('Добавление товара в корзину', { tags: ['smoke'] }, () => {});
it('Удаление товара из корзины', { tags: ['regression'] }, () => {});
});
critical или minor. Это удобно для
приоритизации при CI/CD, чтобы важные проверки выполнялись всегда, а
второстепенные — по расписанию.Теги можно задавать динамически через переменные окружения или конфигурационные файлы.
const tags = Cypress.env('TAGS')?.split(',') || [];
describe('Модуль авторизации', () => {
it('Вход с валидными данными', () => {
if (!tags.includes('smoke')) {
cy.log('Тест пропущен по тегу');
return;
}
// тест
});
});
Такой подход позволяет гибко переключать наборы тестов без изменения кода.
Теги критически важны при работе с пайплайнами:
smoke тесты при pull request и все тесты при слиянии в
main.Пример конфигурации в GitHub Actions:
- name: Cypress run smoke tests
run: npx cypress run --env grepTags=smoke
cypress.config.js или отдельный JSON).flaky.Тщательная организация тестов с использованием тегов повышает управляемость, сокращает время прогона и позволяет строить гибкие стратегии автоматизации, где каждый тест имеет чёткое предназначение и приоритет.