Cypress предоставляет мощные инструменты для управления состоянием приложений между тестами. Одним из ключевых аспектов является сохранение сессий, что позволяет экономить время на повторной аутентификации и поддерживать стабильность тестов.
cy.session()cy.session() — современный и рекомендуемый способ
управления сессиями в Cypress. Метод позволяет сохранять состояние
пользователя, включая куки, localStorage и sessionStorage, и повторно
использовать его в других тестах.
Пример использования:
describe('Тесты с сохранением сессии', () => {
beforeEach(() => {
cy.session('userSession', () => {
cy.visit('/login');
cy.get('#username').type('user');
cy.get('#password').type('password');
cy.get('button[type="submit"]').click();
cy.url().should('include', '/dashboard');
});
});
it('Проверка отображения панели пользователя', () => {
cy.visit('/dashboard');
cy.get('.user-panel').should('be.visible');
});
});
В этом примере сессия 'userSession' создается один раз и
автоматически восстанавливается для последующих тестов. Cypress
сравнивает сохранённое состояние и восстанавливает его без необходимости
повторного логина.
Преимущества cy.session():
До появления cy.session() сохранять сессию приходилось
вручную через куки и localStorage.
Пример сохранения куков:
beforeEach(() => {
cy.getCookie('session_id').then(cookie => {
if (!cookie) {
cy.visit('/login');
cy.get('#username').type('user');
cy.get('#password').type('password');
cy.get('button[type="submit"]').click();
}
});
});
Сохранение и восстановление
localStorage:
let LOCAL_STORAGE_MEMORY = {};
beforeEach(() => {
cy.restoreLocalStorage();
});
afterEach(() => {
cy.saveLocalStorage();
});
Cypress.Commands.add('saveLocalStorage', () => {
Object.keys(localStorage).forEach(key => {
LOCAL_STORAGE_MEMORY[key] = localStorage[key];
});
});
Cypress.Commands.add('restoreLocalStorage', () => {
Object.keys(LOCAL_STORAGE_MEMORY).forEach(key => {
localStorage.setItem(key, LOCAL_STORAGE_MEMORY[key]);
});
});
Такой подход позволяет вручную контролировать состояние между
тестами, но требует дополнительного кода и сложнее в поддержке по
сравнению с cy.session().
Использование cy.session() снижает количество операций
авторизации, что особенно важно при большом наборе тестов. Сессии
кэшируются в памяти или на диске, а Cypress автоматически проверяет,
нужно ли пересоздавать сессию.
Ключевые моменты по производительности:
persist: false.cy.clearCookies(),
cy.clearLocalStorage()) предотвращает неожиданные конфликты
между сессиями.Сессии особенно полезны в интеграции с CI/CD, где многократные
авторизации могут замедлять сборки. Использование
cy.session() позволяет:
Сессии в Cypress — это инструмент для ускорения и стабилизации тестов, позволяющий эффективно управлять состоянием пользователей и избегать лишних авторизаций, обеспечивая более чистый и поддерживаемый код тестов.