Cypress предоставляет встроенную возможность записи видео прохождения
тестов, что особенно полезно для последующего анализа ошибок и
регрессионного тестирования. Механизм записи видео работает на уровне
запуска тестового сьюта через Cypress Test Runner или при запуске тестов
в режиме cypress run. Управление этим процессом
осуществляется через конфигурацию проекта и программные подходы в
тестах.
Видео сохраняются в директории, указанной в настройках
cypress.json или в новом формате
cypress.config.js. Основные параметры:
video – включает или отключает запись
видео. Значение true активирует запись.videoCompression – степень сжатия
видео. При значении 0 видео сохраняется без сжатия, при
32–128 применяются алгоритмы сжатия. Баланс
между качеством и размером файла.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 по умолчанию создает один видеофайл на каждый файл спецификации. Для проектов с большими тестовыми наборами это может быть неудобно, особенно если необходимо анализировать отдельные сценарии.
Методы управления:
Разделение тестов на несколько файлов спецификаций. Каждый файл будет иметь отдельный видеофайл, что упрощает навигацию и уменьшает размер отдельных видео.
Использование флагов video внутри
тестов. Cypress не поддерживает отключение записи видео на
уровне отдельных it блоков напрямую, но можно обойти это,
комбинируя флаги конфигурации и события плагина.
Запись видео может занимать значительное место на диске, особенно при длительных тестах. Основные способы оптимизации:
videoCompression –
уменьшение значения компрессии для ускорения кодирования и экономии
пространства.videoUploadOnPasses.Пример скрипта для архивирования видео старше 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 легко интегрируется с внешними хранилищами:
Пример загрузки видео на 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 является мощным инструментом для анализа и диагностики тестов. Тонкая настройка параметров, контроль сохранения и интеграция с внешними системами позволяют эффективно управлять ресурсами и повышать качество тестирования.