Переменные окружения в Cypress позволяют управлять конфигурацией тестов без изменения исходного кода, обеспечивая гибкость и безопасность при работе с разными средами (development, staging, production). Они позволяют хранить чувствительные данные, такие как URL, токены доступа и пароли, а также параметры, влияющие на поведение тестов.
Cypress поддерживает несколько методов задания переменных окружения. Выбор метода зависит от контекста использования: локальная разработка, CI/CD или динамическая передача параметров.
1. Через файл cypress.env.json
Файл cypress.env.json размещается в корне проекта
Cypress и содержит ключи и значения в формате JSON:
{
"baseUrl": "https://staging.example.com",
"apiToken": "12345-abcdef",
"userEmail": "test@example.com"
}
Все ключи из этого файла становятся доступны в тестах через объект
Cypress.env(). Пример использования:
describe('Авторизация', () => {
it('Должна использовать токен из окружения', () => {
const token = Cypress.env('apiToken');
cy.request({
method: 'GET',
url: '/api/user',
headers: {
Authorization: `Bearer ${token}`
}
}).then((response) => {
expect(response.status).to.eq(200);
});
});
});
Особенности:
cypress.env.json можно добавить в
.gitignore, чтобы не хранить чувствительные данные в
репозитории.2. Через cypress.config.js или
cypress.config.ts
В новой версии Cypress (>=10) переменные окружения можно задавать непосредственно в конфигурационном файле:
import { defineConfig } from 'cypress'
export default defineConfig({
e2e: {
baseUrl: 'https://staging.example.com',
env: {
apiToken: '12345-abcdef',
userRole: 'admin'
}
}
})
Доступ к переменным осуществляется так же через
Cypress.env('имя_переменной').
Преимущества:
development, staging,
production.3. Через командную строку
Переменные окружения можно передавать при запуске Cypress в CLI:
npx cypress run --env apiToken=12345-abcdef,userEmail=test@example.com
В тестах они будут доступны через
Cypress.env('apiToken') и
Cypress.env('userEmail').
Особенности:
4. Через системные переменные окружения
Cypress автоматически считывает переменные окружения из системных
переменных, если они начинаются с префикса CYPRESS_.
Например:
export CYPRESS_API_TOKEN=12345-abcdef
npx cypress run
В тестах доступ:
const token = Cypress.env('API_TOKEN')
Преимущества:
development,
staging и production позволяет запускать тесты
на разных окружениях без изменения кода:npx cypress run --config-file cypress.staging.config.js
В cypress.staging.config.js можно задать уникальные
переменные окружения для staging.
Хранение секретов Чувствительные данные (токены,
пароли) никогда не хранятся в репозитории. Использование системных
переменных или .env файлов с добавлением в
.gitignore обеспечивает безопасность.
Динамическая подмена данных Переменные окружения позволяют подставлять данные, например, email пользователей или токены, которые создаются динамически перед запуском тестов.
beforeEach(() => {
cy.login(Cypress.env('userEmail'), Cypress.env('apiToken'))
})
snake_case или
camelCase.auth,
api, ui.cypress.config.js.Cypress позволяет получить весь объект окружения:
const envVars = Cypress.env()
console.log(envVars)
Это удобно для отладки и проверки корректности подстановки значений.
Переменные окружения часто используются в кастомных командах
(cypress/support/commands.js) для универсальности:
Cypress.Commands.add('login', () => {
cy.request({
method: 'POST',
url: `${Cypress.env('baseUrl')}/login`,
body: {
email: Cypress.env('userEmail'),
password: Cypress.env('userPassword')
}
})
})
Так можно централизованно менять данные для входа без изменения каждого теста.
string.
Для чисел или булевых значений необходимо преобразование:const retries = Number(Cypress.env('RETRIES')) || 1
const isEnabled = Cypress.env('FEATURE_FLAG') === 'true'
cypress.config.js и cypress.env.json.CYPRESS_ префикса из системных
переменных имена автоматически приводятся к верхнему регистру, но при
доступе через Cypress.env() используется имя без
префикса.Эффективная организация переменных окружения обеспечивает гибкость, безопасность и масштабируемость тестов на Cypress, позволяя легко переключаться между средами и управлять конфиденциальными данными без риска утечки.