Эффективная очистка данных после выполнения тестов является критическим аспектом автоматизированного тестирования. Без должной очистки тестовые сценарии могут влиять друг на друга, приводить к нестабильным результатам и усложнять отладку. Cypress предоставляет гибкие инструменты для управления состоянием тестового окружения, включая очистку базы данных, сброс локального состояния браузера и управление API-запросами.
after и afterEachCypress поддерживает Mocha-хуки, позволяющие выполнять код после завершения тестов или каждого теста отдельно.
afterEach(() => {
// Очистка сессии и куки
cy.clearCookies();
cy.clearLocalStorage();
});
after(() => {
// Сброс данных на сервере
cy.request('POST', '/api/test/cleanup');
});
afterEach запускается после каждого
теста, что удобно для сброса локального состояния.after выполняется один раз после всех тестов в
блоке, подходит для глобальной очистки данных на сервере.Для обеспечения чистоты данных после тестов часто используют специальные тестовые эндпоинты. Важно, чтобы эти эндпоинты были доступны только в тестовом окружении.
Cypress.Commands.add('resetDatabase', () => {
cy.request('POST', '/api/test/reset-database');
});
Использование в тестах:
beforeEach(() => {
cy.resetDatabase();
});
Cypress предоставляет методы для очистки cookies, localStorage и sessionStorage, что предотвращает «загрязнение» данных между тестами.
afterEach(() => {
cy.clearCookies();
cy.clearLocalStorage();
sessionStorage.clear();
});
cy.clearCookies() — удаляет все cookies браузера.cy.clearLocalStorage() — очищает localStorage для
текущего домена.sessionStorage.clear() — очищает sessionStorage,
который не поддерживается напрямую Cypress.Фикстуры позволяют подготавливать данные для тестов и управлять их восстановлением. После теста можно удалять созданные записи через API или базу данных.
beforeEach(() => {
cy.fixture('user').then(user => {
cy.request('POST', '/api/users', user);
});
});
afterEach(() => {
cy.request('DELETE', '/api/users');
});
afterEach(() => {
cy.clearCookies();
cy.clearLocalStorage();
cy.request('POST', '/api/test/cleanup')
.then(response => {
expect(response.status).to.eq(200);
});
});
Для крупных проектов очистка через API может быть недостаточной. В таких случаях подключают прямые запросы к базе данных через Node.js.
const { Client } = require('pg');
Cypress.Commands.add('cleanDb', () => {
const client = new Client({ connectionString: process.env.TEST_DB_URL });
client.connect();
client.query('TRUNCATE TABLE users, orders RESTART IDENTITY CASCADE');
client.end();
});
beforeEach для подготовки данных и after для
глобальной очистки.Эффективная очистка данных — ключ к стабильным, предсказуемым и повторяемым тестам в Cypress. Грамотная комбинация хуков, API-запросов и управления локальным состоянием браузера обеспечивает высокое качество тестирования и минимизирует влияние тестов друг на друга.