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
}));
}
};
Ключевые параметры:
true, все тесты
будут записываться в один видеофайл; если false, каждый
тест создаёт отдельный файл.true тест,
завершившийся с ошибкой, будет отражён в видео отчёте.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:
1280x720 или 1920x1080.libx264 для совместимости и качества.ultrafast, fast, medium,
slow. Быстрая кодировка уменьшает нагрузку на CI/CD, но
увеличивает размер файла.x11grab для Linux,
gdigrab для Windows, avfoundation для
macOS).Для длинных тестов важно разбивать видео на сегменты, чтобы упрощать анализ и хранение. ffmpeg поддерживает сегментацию:
ffmpeg -i input.mp4 -c copy -map 0 -f segment -segment_time 300 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).Пример автоматической очистки:
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 дней, что снижает нагрузку на диск.
Для запуска видеофиксации на Jenkins, GitLab CI или GitHub Actions важно учитывать:
Пример запуска Xvfb для Linux:
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
protractor protractor.conf.js
-vf "drawtext=text='Test':x=10:y=10:fontsize=24:fontcolor=white").Настройка видео параметров в Protractor требует сочетания конфигурации репортера, управления ffmpeg и интеграции с CI/CD, что позволяет получать качественные записи тестов для анализа ошибок, воспроизведения сценариев и отчетности.