Управление сохранением видео

Cypress предоставляет встроенную возможность записи видео прохождения тестов, что особенно полезно для последующего анализа ошибок и регрессионного тестирования. Механизм записи видео работает на уровне запуска тестового сьюта через Cypress Test Runner или при запуске тестов в режиме cypress run. Управление этим процессом осуществляется через конфигурацию проекта и программные подходы в тестах.


Основные параметры конфигурации видео

Видео сохраняются в директории, указанной в настройках cypress.json или в новом формате cypress.config.js. Основные параметры:

  • video – включает или отключает запись видео. Значение true активирует запись.
  • videoCompression – степень сжатия видео. При значении 0 видео сохраняется без сжатия, при 32128 применяются алгоритмы сжатия. Баланс между качеством и размером файла.
  • videosFolder – путь к директории, куда сохраняются видеофайлы. Можно указать абсолютный или относительный путь.
  • videoUploadOnPasses – определяет, сохранять ли видео для успешных тестов (true) или только для упавших (false). Позволяет экономить место на диске.

Пример конфигурации в cypress.config.js:

const { defineConfig } = require('cypress');

module.exports = defineConfig({
  video: true,
  videoCompression: 32,
  videosFolder: 'cypress/videos',
  videoUploadOnPasses: false,
});

Управление видео через плагины и события

Cypress предоставляет события, позволяющие детально управлять процессом записи и сохранения видео.

  • before:spec – вызывается перед запуском каждого файла спецификации. Можно использовать для подготовки настроек видео или очистки старых файлов.
  • after:spec – вызывается после завершения тестов. Содержит объект с информацией о результате теста (spec и results). На этом этапе возможно программное удаление или перемещение видео.

Пример использования события after:spec для удаления видео успешных тестов:

const fs = require('fs');
const path = require('path');

module.exports = (on, config) => {
  on('after:spec', (spec, results) => {
    if (results && results.video && results.stats.failures === 0) {
      fs.unlinkSync(results.video);
    }
  });
};

Этот подход позволяет хранить видео только для упавших тестов, освобождая место на диске и ускоряя последующую работу с отчетами.


Разделение видео по тестовым сьютам

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

Методы управления:

  1. Разделение тестов на несколько файлов спецификаций. Каждый файл будет иметь отдельный видеофайл, что упрощает навигацию и уменьшает размер отдельных видео.

  2. Использование флагов video внутри тестов. Cypress не поддерживает отключение записи видео на уровне отдельных it блоков напрямую, но можно обойти это, комбинируя флаги конфигурации и события плагина.


Оптимизация размера видео

Запись видео может занимать значительное место на диске, особенно при длительных тестах. Основные способы оптимизации:

  • Сжатие видео через videoCompression – уменьшение значения компрессии для ускорения кодирования и экономии пространства.
  • Отключение видео для успешных тестов – параметр videoUploadOnPasses.
  • Удаление или архивирование старых видео через скрипты Node.js – можно автоматизировать очистку, используя дату создания файла или имя теста.

Пример скрипта для архивирования видео старше 7 дней:

const fs = require('fs');
const path = require('path');

const videosFolder = path.join(__dirname, 'cypress/videos');
const DAYS = 7;

fs.readdirSync(videosFolder).forEach(file => {
  const filePath = path.join(videosFolder, file);
  const stats = fs.statSync(filePath);
  const ageDays = (Date.now() - stats.mtimeMs) / (1000 * 60 * 60 * 24);
  if (ageDays > DAYS) {
    fs.renameSync(filePath, path.join(videosFolder, 'archive', file));
  }
});

Работа с внешними хранилищами

Для крупных проектов локальное хранение видео может быть неудобным. Cypress легко интегрируется с внешними хранилищами:

  • CI/CD сервера (GitHub Actions, GitLab CI, Jenkins) – видео можно загружать после завершения тестов.
  • Облачные хранилища (AWS S3, Google Cloud Storage) – интеграция через скрипты Node.js или плагины.
  • Системы отчетности (Allure, Mochawesome) – поддерживают ссылки на видео для упавших тестов.

Пример загрузки видео на S3 после теста:

const AWS = require('aws-sdk');
const fs = require('fs');

const s3 = new AWS.S3({ region: 'us-east-1' });

module.exports = (on, config) => {
  on('after:spec', (spec, results) => {
    if (results && results.video) {
      const fileContent = fs.readFileSync(results.video);
      const params = {
        Bucket: 'my-cypress-videos',
        Key: path.basename(results.video),
        Body: fileContent
      };
      s3.upload(params, (err, data) => {
        if (err) console.error(err);
      });
    }
  });
};

Контроль качества видео

Для точного анализа важно учитывать несколько факторов:

  • Частота кадров и разрешение – Cypress генерирует видео в стандартном разрешении браузера, однако через виртуальный экран (например, в CI) можно регулировать размер окна для повышения четкости.
  • Синхронизация с логами тестов – встроенные метки времени помогают сопоставлять события теста с видео.
  • Сегментация длинных сценариев – при необходимости можно разделять видео на логические блоки, используя несколько файлов спецификаций или кастомные скрипты.

Использование видео в Cypress является мощным инструментом для анализа и диагностики тестов. Тонкая настройка параметров, контроль сохранения и интеграция с внешними системами позволяют эффективно управлять ресурсами и повышать качество тестирования.