Эффективное тестирование с помощью Cypress невозможно без продуманной организации тестовых данных. Тестовые данные определяют поведение приложения в автоматизированных сценариях и напрямую влияют на надежность и повторяемость тестов.
В Cypress тестовые данные обычно представляют собой объекты JavaScript или JSON-файлы. Стандартный подход включает разделение данных на:
Пример статических данных:
// cypress/fixtures/users.json
{
"admin": {
"username": "admin_user",
"password": "admin_pass"
},
"guest": {
"username": "guest_user",
"password": "guest_pass"
}
}
Пример использования в тесте:
cy.fixture('users').then((users) => {
cy.login(users.admin.username, users.admin.password)
})
Фикстуры (fixtures) в Cypress хранятся в папке
cypress/fixtures. Каждая фикстура представляет собой
отдельный файл с набором данных, что облегчает повторное использование и
поддержку. Основные рекомендации:
Cypress поддерживает создание пользовательских команд в файле
cypress/support/commands.js. Они помогают стандартизировать
подготовку данных и уменьшить дублирование кода.
Пример команды для логина пользователя:
Cypress.Commands.add('login', (username, password) => {
cy.request({
method: 'POST',
url: '/api/login',
body: { username, password }
}).then((resp) => {
window.localStorage.setItem('authToken', resp.body.token)
})
})
Команды можно комбинировать с фикстурами:
cy.fixture('users').then((users) => {
cy.login(users.guest.username, users.guest.password)
})
Для тестирования сценариев с уникальными значениями необходимо
создавать динамические данные. Обычно используют библиотеки вроде
faker или uuid.
Пример генерации случайного email:
import { faker } from '@faker-js/faker'
const randomEmail = faker.internet.email()
cy.get('#email').type(randomEmail)
Динамические данные можно сохранять в локальные переменные или
Cypress.env, если они нужны между разными тестами:
Cypress.env('orderId', newOrder.id)
Cypress позволяет взаимодействовать с серверной частью напрямую через HTTP-запросы, что ускоряет подготовку тестовой среды.
Пример создания нового пользователя через API:
cy.request('POST', '/api/users', {
username: 'test_user',
password: '12345'
}).then((response) => {
expect(response.status).to.eq(201)
})
Такой подход уменьшает зависимость от UI и повышает скорость выполнения тестов.
Поддержание чистоты данных критично для повторяемости тестов. Используют несколько стратегий:
Удаление через API после завершения теста:
cy.request('DELETE', `/api/users/${userId}`)Использование хуков after и
afterEach для сброса состояния:
afterEach(() => {
cy.request('POST', '/api/reset-database')
})Cypress позволяет конфигурировать данные в зависимости от окружения
(development, staging,
production) через cypress.config.js и
env переменные.
Пример конфигурации:
export default defineConfig({
e2e: {
env: {
baseUrl: 'https://staging.example.com',
adminUser: 'admin_staging'
}
}
})
Использование данных в тестах:
cy.visit(Cypress.env('baseUrl'))
cy.login(Cypress.env('adminUser'), 'password')
Такая организация тестовых данных делает тесты Cypress надежными, повторяемыми и легкими в сопровождении.