Настройка видео параметров

Конфигурация видео захвата

Protractor, как инструмент для автоматизированного тестирования Angular и других веб-приложений, не имеет встроенной поддержки записи видео тестов, но интегрируется с внешними библиотеками, такими как Protractor-video-reporter или ffmpeg, для фиксации выполнения тестов. Настройка видео начинается с установки соответствующего пакета:

npm install protractor-video-reporter --save-dev

После установки необходимо подключить видео-репортер в конфигурационный файл protractor.conf.js:

const VideoReporter = require('protractor-video-reporter');

exports.config = {
    framework: 'jasmine',
    seleniumAddress: 'http://localhost:4444/wd/hub',
    specs: ['specs/**/*.spec.js'],
    onPrepare: () => {
        jasmine.getEnv().addReporter(new VideoReporter({
            baseDirectory: 'test-videos/',
            singleFile: false,
            failTestOnError: true,
            saveAllVideos: false
        }));
    }
};

Ключевые параметры:

  • baseDirectory – директория для сохранения видео файлов. Желательно использовать путь относительно корня проекта, чтобы упрощать интеграцию с CI/CD.
  • singleFile – если true, все тесты будут записываться в один видеофайл; если false, каждый тест создаёт отдельный файл.
  • failTestOnError – при true тест, завершившийся с ошибкой, будет отражён в видео отчёте.
  • saveAllVideos – при true сохраняются все видео, включая успешные тесты; при false — только тесты с ошибками.

Настройка качества и формата видео

Для управления качеством видео чаще всего используется ffmpeg. В Protractor можно запускать ffmpeg через Node.js, обернув процесс в beforeLaunch и afterLaunch:

const { exec } = require('child_process');

let ffmpegProcess;

exports.config = {
    beforeLaunch: () => {
        ffmpegProcess = exec('ffmpeg -f x11grab -video_size 1920x1080 -i :0.0 -codec:v libx264 -preset ultrafast test-videos/output.mp4');
    },
    afterLaunch: () => {
        ffmpegProcess.kill('SIGINT');
    }
};

Настраиваемые параметры ffmpeg:

  • -video_size – разрешение видео, например, 1280x720 или 1920x1080.
  • -codec:v – видеокодек, рекомендуем libx264 для совместимости и качества.
  • -preset – скорость кодирования: ultrafast, fast, medium, slow. Быстрая кодировка уменьшает нагрузку на CI/CD, но увеличивает размер файла.
  • -f x11grab / -f gdigrab – метод захвата экрана, зависит от операционной системы (x11grab для Linux, gdigrab для Windows, avfoundation для macOS).

Управление продолжительностью и сегментацией

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

ffmpeg -i input.mp4 -c copy -map 0 -f segment -segment_time 300 output_%03d.mp4
  • -segment_time 300 – каждые 5 минут создаётся отдельный файл.
  • output_%03d.mp4 – шаблон для имен файлов с нумерацией.

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

Синхронизация видео с логами тестов

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

jasmine.getEnv().addReporter({
    specStarted: (result) => {
        console.log(`Начало теста: ${result.fullName}`);
    },
    specDone: (result) => {
        console.log(`Тест завершён: ${result.fullName}, статус: ${result.status}`);
    }
});

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

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

Для больших проектов видеофайлы быстро занимают много места. Рекомендуется:

  • Выбирать кодек с высокой степенью сжатия (libx264 с crf 23–28).
  • Сохранять только тесты с ошибками или важные критические сценарии.
  • Интегрировать автоматическую очистку старых видео через скрипты Node.js или cron.

Пример автоматической очистки:

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

const dir = 'test-videos/';
fs.readdir(dir, (err, files) => {
    if (err) throw err;
    files.forEach(file => {
        const filePath = path.join(dir, file);
        fs.stat(filePath, (err, stats) => {
            if (err) throw err;
            const age = (Date.now() - stats.mtimeMs) / (1000 * 60 * 60 * 24);
            if (age > 30) fs.unlink(filePath, () => {});
        });
    });
});

Этот скрипт удаляет видео старше 30 дней, что снижает нагрузку на диск.

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

Для запуска видеофиксации на Jenkins, GitLab CI или GitHub Actions важно учитывать:

  • Разрешение экрана на виртуальной машине или контейнере (например, через Xvfb для Linux).
  • Ограничения по ресурсам при параллельных тестах.
  • Синхронизацию начала и окончания видео с запуском тестов.

Пример запуска Xvfb для Linux:

Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
protractor protractor.conf.js

Дополнительные возможности

  • Водяные знаки и логотипы: можно накладывать с помощью ffmpeg фильтров (-vf "drawtext=text='Test':x=10:y=10:fontsize=24:fontcolor=white").
  • Синхронизация с сетевыми запросами: можно записывать одновременно HAR-файлы и совмещать их с видео для анализа производительности.
  • Мультибраузерная запись: при параллельных тестах можно записывать несколько окон, присваивая каждому уникальный идентификатор.

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