В тестировании веб-приложений нередко возникает необходимость работать с чувствительной информацией: пароли, токены, API-ключи, личные данные пользователей. Cypress предоставляет возможности для безопасного использования таких данных, минимизируя риск их утечки и обеспечивая удобство работы в разных средах.
Для хранения конфиденциальной информации в проектах Cypress рекомендуется использовать файлы окружения и переменные среды.
cypress.env.json — файл, который может
содержать ключи и значения, доступные во всех тестах:{
"apiKey": "your_api_key_here",
"userPassword": "secure_password"
}
npx cypress open --env apiKey=your_api_key_here,userPassword=secure_password
.env совместно с библиотекой
dotenv для загрузки данных:require('dotenv').config();
Cypress.env('apiKey', process.env.API_KEY);
Cypress.env('userPassword', process.env.USER_PASSWORD);
Файл cypress.env.json и .env не должны
попадать в систему контроля версий (.gitignore).
Cypress предоставляет метод
Cypress.env() для безопасного доступа к
данным:
describe('Авторизация пользователя', () => {
it('Вводит правильный пароль и логин', () => {
cy.visit('/login');
cy.get('#username').type('testuser');
cy.get('#password').type(Cypress.env('userPassword'), { log: false });
cy.get('button[type="submit"]').click();
cy.contains('Добро пожаловать').should('be.visible');
});
});
Ключевой момент: параметр
{ log: false } предотвращает отображение введенного
значения в логах Cypress. Это критично при работе с паролями и
токенами.
Для разных сред (development, staging, production) можно создавать отдельные файлы окружения:
cypress.env.development.json
cypress.env.staging.json
cypress.env.production.json
Загрузка данных конкретной среды выполняется через команду:
npx cypress run --env-file cypress.env.staging.json
Это позволяет использовать одни и те же тесты, но с разными конфигурациями и чувствительными данными, не меняя код тестов.
Для особо критичных данных можно применять шифрование:
cypress.env.json.const crypto = require('crypto');
function decrypt(value) {
const decipher = crypto.createDecipher('aes256', process.env.ENCRYPTION_KEY);
let decrypted = decipher.update(value, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
const password = decrypt(Cypress.env('encryptedPassword'));
Это снижает риск компрометации данных в случае утечки файлов конфигурации.
API-токены можно хранить как переменные окружения и использовать в
запросах через cy.request:
cy.request({
method: 'GET',
url: '/api/user',
headers: {
Authorization: `Bearer ${Cypress.env('apiToken')}`
}
}).then((response) => {
expect(response.status).to.eq(200);
});
Использование переменных окружения позволяет не хранить токены в коде тестов и обновлять их без изменения тестовой логики.
Cypress по умолчанию логирует команды и значения. Чтобы данные не отображались:
{ log: false } при вводе данных.cy.request можно скрыть тело запроса, если оно
содержит пароли или токены.Пример с cy.request:
cy.request({
method: 'POST',
url: '/login',
body: { username: 'testuser', password: Cypress.env('userPassword') },
log: false
});
В CI/CD пайплайнах чувствительные данные хранятся в секретах среды. Например, GitHub Actions, GitLab CI и Jenkins позволяют задать переменные окружения, доступные только на этапе запуска тестов.
Пример для GitHub Actions:
env:
USER_PASSWORD: ${{ secrets.USER_PASSWORD }}
API_KEY: ${{ secrets.API_KEY }}
steps:
- name: Run Cypress tests
run: npx cypress run
В тестах эти значения извлекаются через Cypress.env()
или process.env.
{ log: false }.Эти практики обеспечивают безопасную работу с конфиденциальной информацией в тестах Cypress, минимизируют риск утечки и делают автоматизацию более надежной и масштабируемой.