Динамическая конфигурация

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


Основные возможности конфигурации

Cypress поддерживает несколько способов конфигурации:

  1. Глобальная конфигурация через cypress.config.js или cypress.config.ts. Здесь задаются основные параметры, такие как:

    • baseUrl — базовый URL для тестов.
    • defaultCommandTimeout — время ожидания команд.
    • viewportWidth и viewportHeight — размеры окна браузера.
    • env — переменные окружения.
  2. Конфигурация на уровне теста с помощью метода Cypress.config(). Этот метод позволяет изменять настройки прямо во время выполнения:

    Cypress.config('defaultCommandTimeout', 10000);
  3. Переменные окружения через Cypress.env():

    const apiToken = Cypress.env('API_TOKEN');

    Переменные окружения можно задавать через файл cypress.env.json, через командную строку или через CI/CD.


Динамическая смена baseUrl

Для тестов, которые должны запускаться на нескольких средах (development, staging, production), удобно изменять baseUrl динамически. Например:

const env = Cypress.env('ENV') || 'development';

const urls = {
  development: 'http://localhost:3000',
  staging: 'https://staging.example.com',
  production: 'https://example.com'
};

Cypress.config('baseUrl', urls[env]);

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


Конфигурация таймаутов в зависимости от условий

В некоторых сценариях выполнение теста может занимать больше времени, например, при работе с медленным API. Таймауты можно задавать динамически:

beforeEach(() => {
  const isSlowEnvironment = Cypress.env('SLOW_ENV');
  Cypress.config('defaultCommandTimeout', isSlowEnvironment ? 20000 : 5000);
});

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


Управление переменными окружения в тестах

Переменные окружения позволяют хранить секреты и данные конфигурации. В отличие от Cypress.config(), они доступны в любом месте теста:

describe('API tests', () => {
  it('should fetch user data', () => {
    const token = Cypress.env('API_TOKEN');
    cy.request({
      url: '/user',
      headers: { Authorization: `Bearer ${token}` }
    }).then(response => {
      expect(response.status).to.eq(200);
    });
  });
});

Переменные окружения можно менять на лету для адаптации тестов к разным условиям.


Динамическая конфигурация команд и хуков

Некоторые команды Cypress можно настраивать динамически, исходя из состояния теста. Например, изменение таймаута для конкретной команды:

cy.get('#submit', { timeout: Cypress.env('SUBMIT_TIMEOUT') || 5000 }).click();

Также хуки before, beforeEach, after, afterEach можно использовать для динамической настройки окружения:

beforeEach(() => {
  if (Cypress.env('USE_MOCK')) {
    cy.intercept('GET', '/api/data', { fixture: 'mockData.json' });
  }
});

Это облегчает тестирование как настоящего сервиса, так и мокированных данных.


Конфигурация через CLI

Cypress поддерживает передачу конфигурации через командную строку, что особенно удобно в CI/CD:

cypress run --env ENV=staging,API_TOKEN=abc123 --config baseUrl=https://staging.example.com

Команда позволяет одновременно задавать переменные окружения и переопределять стандартные конфигурационные параметры.


Использование динамической конфигурации с Cypress.config() и Cypress.env()

Разделение параметров:

  • Cypress.config() — управляет поведением Cypress (таймауты, baseUrl, viewport).
  • Cypress.env() — хранит данные, необходимые для выполнения тестов (ключи, флаги, URL ресурсов).

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


Практическая схема организации конфигурации

  1. Основная конфигурация (cypress.config.js) — задаёт параметры по умолчанию.
  2. Файлы переменных окружения (cypress.env.json) — хранят токены и пути к ресурсам для каждой среды.
  3. Динамическая настройка в хуках — подстраивает параметры под конкретные тестовые сценарии.
  4. CLI и CI/CD — позволяет запускать тесты с конкретными параметрами без изменения кода.

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