В автоматизированном тестировании корректные и предсказуемые тестовые данные являются фундаментом стабильности тестов. В контексте Cypress тестовые данные включают информацию, необходимую для взаимодействия с приложением: пользователи, продукты, заказы, формы ввода, конфигурации и состояния системы. Недостаточно просто создать тесты — их корректность напрямую зависит от данных, на которых они выполняются.
Фиксированные данные в коде Простая стратегия — хранить тестовые данные прямо в тестовых файлах. Например, массив объектов с данными пользователей:
const users = [
{ username: "user1", password: "Password123!" },
{ username: "user2", password: "SecurePass456!" }
];
Преимущество: простота и скорость доступа. Недостаток: данные становятся статичными, что затрудняет тестирование разных сценариев или больших объемов данных.
Файлы фикстур (fixtures) Cypress поддерживает
использование файлов JSON, которые можно хранить в папке
cypress/fixtures. Это позволяет отделить данные от логики
теста:
// users.json
[
{ "username": "user1", "password": "Password123!" },
{ "username": "user2", "password": "SecurePass456!" }
]
cy.fixture('users.json').then((users) => {
cy.get('input[name=username]').type(users[0].username);
cy.get('input[name=password]').type(users[0].password);
});
Такой подход повышает читаемость тестов и упрощает поддержку данных при изменении требований.
Динамически генерируемые данные Для
тестирования, где важно уникальное состояние (например, регистрация
новых пользователей), используются библиотеки генерации данных, такие
как faker или chance.
import { faker } from '@faker-js/faker';
const randomUser = {
username: faker.internet.userName(),
email: faker.internet.email(),
password: faker.internet.password()
};
cy.get('input[name=username]').type(randomUser.username);
cy.get('input[name=email]').type(randomUser.email);
cy.get('input[name=password]').type(randomUser.password);
Генерация данных снижает вероятность конфликтов при многократных запусках тестов и делает сценарии более реалистичными.
Для корректного тестирования необходимо приводить приложение в предсказуемое состояние перед выполнением теста. Cypress предлагает несколько стратегий:
Использование API для подготовки данных Создание пользователей, товаров или других сущностей через REST API или GraphQL до запуска теста позволяет избежать длительной последовательности действий через интерфейс.
cy.request('POST', '/api/users', { username: 'testUser', password: 'pass123' })
.then((response) => {
expect(response.status).to.eq(201);
});
Этот подход ускоряет тесты и делает их более устойчивыми к изменениям UI.
Очистка и сброс состояния После каждого теста
рекомендуется очищать созданные данные или возвращать базу данных в
исходное состояние. Cypress позволяет выполнять команды перед каждым
тестом через beforeEach или afterEach:
beforeEach(() => {
cy.request('POST', '/api/reset-database');
});
Это гарантирует, что тесты будут независимыми и повторяемыми.
Для тестирования аутентификации и других чувствительных операций
часто требуются реальные учетные данные. В Cypress их удобно хранить в
cypress.env.json или использовать переменные окружения.
{
"adminUser": "admin",
"adminPass": "Admin123!"
}
cy.get('input[name=username]').type(Cypress.env('adminUser'));
cy.get('input[name=password]').type(Cypress.env('adminPass'));
Такой подход предотвращает утечку данных и обеспечивает гибкость при запуске тестов в разных окружениях.
Подготовка тестовых данных в Cypress требует продуманного подхода: статические, динамические и API-инициализируемые данные комбинируются для обеспечения стабильности, повторяемости и гибкости тестов. Встроенные возможности фикстур, переменных окружения и генераторов данных позволяют поддерживать чистую архитектуру тестов и минимизировать ошибки, связанные с некорректными или устаревшими данными.