Динамическая конфигурация в Cypress позволяет управлять поведением тестов в зависимости от условий окружения, параметров запуска или данных, полученных во время выполнения. Это ключевой инструмент для построения гибких и масштабируемых тестовых сценариев.
Cypress поддерживает несколько способов конфигурации:
Глобальная конфигурация через
cypress.config.js или cypress.config.ts. Здесь
задаются основные параметры, такие как:
baseUrl — базовый URL для тестов.defaultCommandTimeout — время ожидания команд.viewportWidth и viewportHeight — размеры
окна браузера.env — переменные окружения.Конфигурация на уровне теста с помощью метода
Cypress.config(). Этот метод позволяет изменять настройки
прямо во время выполнения:
Cypress.config('defaultCommandTimeout', 10000);Переменные окружения через
Cypress.env():
const apiToken = Cypress.env('API_TOKEN');
Переменные окружения можно задавать через файл
cypress.env.json, через командную строку или через
CI/CD.
Для тестов, которые должны запускаться на нескольких средах
(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' });
}
});
Это облегчает тестирование как настоящего сервиса, так и мокированных данных.
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 ресурсов).Комбинация этих методов обеспечивает максимальную гибкость и уменьшает дублирование кода при работе с разными средами и настройками.
cypress.config.js) — задаёт параметры по умолчанию.cypress.env.json) — хранят токены и пути к ресурсам для
каждой среды.Динамическая конфигурация в Cypress делает тесты адаптивными, позволяет легко переключаться между средами, управлять поведением команд и хранить секреты безопасно, обеспечивая устойчивость тестового набора и сокращая время поддержки тестов.