Организация медиафайлов

Структура проекта и папки для медиафайлов

В Cypress медиафайлы используются для различных целей: скриншоты тестов, видео выполнения, фикстуры для тестирования, и статические ресурсы, необходимые для автоматизации. Правильная организация этих файлов повышает читаемость тестов, облегчает их поддержку и позволяет автоматизировать процессы сборки и отчётности.

По умолчанию Cypress создаёт следующие ключевые директории:

  • cypress/fixtures — хранение статических файлов и тестовых данных, включая JSON, изображения, CSV и другие форматы, которые используются в тестах.
  • cypress/screenshots — место хранения скриншотов, сделанных во время выполнения тестов, обычно автоматически создаваемых при падении теста или по явному вызову команды cy.screenshot().
  • cypress/videos — хранение видеозаписей выполнения тестов при включённой опции video: true в cypress.config.js.

Для удобства работы рекомендуется соблюдать правила:

  1. Разделять медиафайлы по типу: скриншоты в отдельной папке, видео в другой, фикстуры — в третьей.
  2. Использовать вложенные директории для группировки по функционалу тестов, например cypress/fixtures/login или cypress/screenshots/admin_panel.
  3. Названия файлов должны быть информативными и отражать суть теста или сценария.

Фикстуры: управление тестовыми медиафайлами

Фикстуры — это один из основных инструментов работы с медиафайлами. Они позволяют подгружать данные для тестов без необходимости повторного создания объектов вручную.

Пример структуры:

cypress/fixtures/
├─ users.json
├─ images/
│  ├─ avatar.png
│  └─ logo.svg

Загрузка фикстуры в тесте осуществляется через cy.fixture():

cy.fixture('users.json').then((users) => {
  cy.get('#username').type(users.admin.username);
  cy.get('#password').type(users.admin.password);
});

Фикстуры с изображениями или бинарными данными можно использовать, например, для тестирования загрузки файлов:

cy.fixture('images/avatar.png', 'base64').then(fileContent => {
  cy.get('input[type="file"]').attachFile({
    fileContent,
    fileName: 'avatar.png',
    mimeType: 'image/png'
  });
});

Использование base64 гарантирует правильную передачу бинарного содержимого.

Скриншоты: автоматизация и организация

Cypress позволяет создавать скриншоты автоматически при падении тестов или вручную. В конфигурации можно настроить следующие параметры:

e2e: {
  screenshotOnRunFailure: true,
  screenshotsFolder: 'cypress/screenshots'
}

При автоматическом создании Cypress формирует структуру директорий, повторяющую структуру тестов, что упрощает поиск ошибок:

cypress/screenshots/
├─ login.spec.js/
│  ├─ should_login_successfully.png
│  └─ should_fail_login.png

Ручное создание скриншота выполняется командой:

cy.screenshot('login-success');

Для удобства рекомендуется:

  • Использовать логические названия, отражающие шаг теста.
  • Разделять скриншоты по папкам, соответствующим функциональным блокам.
  • При большом объёме тестов включать автоматическую очистку старых скриншотов для экономии дискового пространства.

Видео: запись и управление

Запись видео полезна для анализа сложных сценариев, особенно при интеграционном тестировании. Включается через конфигурацию:

e2e: {
  video: true,
  videosFolder: 'cypress/videos'
}

Видео создаются в формате .mp4 и по умолчанию именуются по имени спецификации. Рекомендуется:

  • Группировать видео по функциональности.
  • Настраивать качество записи и частоту кадров при необходимости анализа медленных тестов.
  • Использовать видео для интеграции с CI/CD, чтобы визуально контролировать процесс выполнения.

Практические рекомендации по организации

  1. Единая схема именования: тип_теста_имя_сценария_дата/время позволяет быстро идентифицировать нужный файл.
  2. Отделение медиаданных от кода: фикстуры, скриншоты и видео должны храниться отдельно от исходных файлов тестов.
  3. Автоматизация очистки: регулярная очистка устаревших скриншотов и видео через скрипты или CI/CD снижает нагрузку на репозиторий.
  4. Использование поддиректорий для крупных проектов: функциональные блоки и модули приложения имеют собственные папки внутри fixtures, screenshots и videos.
  5. Управление бинарными данными: при работе с изображениями и другими медиафайлами рекомендуется использовать base64 или бинарный режим, чтобы избежать ошибок кодирования.

Интеграция с CI/CD

Для командной работы и автоматизации рекомендуется:

  • Подключать папки screenshots и videos к отчётам о выполнении тестов.
  • Сохранять медиафайлы как артефакты сборки для последующего анализа.
  • Настраивать автоматическое удаление устаревших видео при успешном прохождении тестов.

Правильная организация медиафайлов повышает надёжность тестирования и снижает вероятность ошибок при масштабировании проектов. Она обеспечивает прозрачность процесса, облегчает отладку и ускоряет взаимодействие с системой CI/CD.