Cypress предоставляет мощные инструменты для работы с HTTP-запросами, включая возможность управлять заголовками (headers) и cookies. Это особенно важно при тестировании REST API, аутентификации, сохранении сессий и настройке кастомных параметров запросов.
В Cypress заголовки можно задавать как при глобальных конфигурациях, так и на уровне отдельных запросов.
Пример задания заголовков для одного запроса:
cy.request({
method: 'GET',
url: '/api/users',
headers: {
'Authorization': 'Bearer token123',
'Content-Type': 'application/json'
}
}).then((response) => {
expect(response.status).to.eq(200);
expect(response.body).to.have.property('users');
});
Ключевые моменты:
Authorization часто используется для передачи
токенов.Content-Type определяет формат данных запроса.Для упрощения тестов часто задают заголовки глобально в
cypress/support/commands.js или через
Cypress.Commands.add.
Пример глобальной настройки заголовков:
Cypress.Commands.add('apiRequest', (method, url, body = {}) => {
cy.request({
method,
url,
body,
headers: {
'Authorization': `Bearer ${Cypress.env('API_TOKEN')}`,
'Content-Type': 'application/json'
}
});
});
Использование:
cy.apiRequest('POST', '/api/login', { username: 'user', password: 'pass' });
Преимущество глобальных команд — единая точка изменения заголовков при обновлении токенов или типов контента.
Cypress позволяет как читать, так и устанавливать cookies, что необходимо для тестирования сессий и авторизации.
Сохранение cookie после логина:
cy.request({
method: 'POST',
url: '/api/login',
body: { username: 'user', password: 'pass' }
}).then((response) => {
expect(response.status).to.eq(200);
cy.setCookie('session_id', response.body.session_id);
});
Чтение cookie:
cy.getCookie('session_id').then((cookie) => {
expect(cookie.value).to.exist;
});
Удаление cookie:
cy.clearCookie('session_id');
Удаление всех cookie:
cy.clearCookies();
Cookies могут быть автоматически переданы в последующих
cy.request благодаря встроенному управлению сессиями, либо
явно:
cy.getCookie('session_id').then((cookie) => {
cy.request({
method: 'GET',
url: '/api/profile',
headers: {
'Content-Type': 'application/json'
},
cookies: {
'session_id': cookie.value
}
}).then((response) => {
expect(response.status).to.eq(200);
});
});
Cypress позволяет проверять, какие headers и cookies вернул сервер:
cy.request('/api/profile').then((response) => {
expect(response.headers).to.have.property('content-type', 'application/json; charset=utf-8');
expect(response.headers).to.have.property('x-rate-limit');
expect(response.cookies).to.have.length.greaterThan(0);
});
Особенности:
response.headers — объект всех заголовков ответа.response.cookies — массив cookies, установленных
сервером.cy.getCookie.В реальных сценариях заголовки и cookies часто зависят от данных, полученных на предыдущих шагах теста:
cy.request('/api/get-token').then((res) => {
const token = res.body.token;
cy.request({
method: 'GET',
url: '/api/data',
headers: {
'Authorization': `Bearer ${token}`
}
}).then((response) => {
expect(response.status).to.eq(200);
});
});
Cookies могут передаваться аналогичным образом, что позволяет эмулировать полноценную пользовательскую сессию.
Cypress.Cookies.defaultsДля оптимизации тестов можно установить правила обработки cookies:
Cypress.Cookies.defaults({
preserve: ['session_id', 'remember_token']
});
Это позволяет сохранять определённые cookies между тестами без необходимости повторного логина.
Пример:
cy.request('POST', '/api/login', { username: 'user', password: 'pass' })
.then((res) => {
cy.setCookie('session_id', res.body.session_id);
});
cy.visit('/dashboard');
cy.contains('Welcome').should('be.visible');
Такой подход ускоряет тесты и уменьшает зависимость от UI.
Cypress.env).Cypress.Cookies.defaults.Эти возможности делают Cypress гибким инструментом для комплексного тестирования API и управления сессиями. Заголовки и cookies становятся ключевым инструментом при проверке аутентификации, авторизации и сценариев с динамическими данными.