Запись видео тестов

Protractor изначально не предоставляет встроенной функции записи видео тестов, поэтому для фиксации видеопотока используются внешние инструменты, такие как ffmpeg, protractor-video-reporter, browserstack, selenium-video-reporter или кастомные скрипты на Node.js.

Для начала необходимо убедиться, что окружение подготовлено:

  1. Node.js — последняя стабильная версия.
  2. Protractor — глобальная или локальная установка:
npm install -g protractor
  1. ffmpeg — инструмент для записи экрана или окна браузера:
# Установка на Ubuntu
sudo apt install ffmpeg
# Установка на MacOS
brew install ffmpeg
  1. protractor-video-reporter — npm-пакет для интеграции видеофиксации:
npm install --save-dev protractor-video-reporter

Интеграция видеофиксатора с конфигурацией Protractor

Конфигурационный файл protractor.conf.js дополняется настройками для видео. Основные моменты:

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

exports.config = {
  framework: 'jasmine',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['tests/**/*.spec.js'],

  onPrepare: () => {
    jasmine.getEnv().addReporter(new VideoReporter({
      baseDirectory: 'videos/',       // Папка для сохранения видео
      singleVideo: false,             // Разделение видео по тестам
      videoOptions: {
        fps: 25,
        videoCodec: 'libx264',
        videoBitrate: 1024
      }
    }));
  }
};

Ключевые моменты конфигурации:

  • baseDirectory — путь для сохранения файлов видео; важно заранее создавать папку или настраивать автоматическое создание.
  • singleVideo — если true, все тесты объединяются в одно видео, если false — создаётся отдельный файл на каждый тест.
  • videoOptions — параметры записи, включая частоту кадров и качество кодирования.

Управление записью видео

Protractor-video-reporter запускает запись автоматически при старте теста и останавливает её после завершения. Однако при использовании кастомных подходов через ffmpeg можно управлять записью программно:

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

exports.config = {
  onPrepare: () => {
    ffmpegProcess = exec('ffmpeg -y -video_size 1920x1080 -f x11grab -i :0.0 videos/test.mp4');
  },
  onComplete: () => {
    ffmpegProcess.kill('SIGINT');  // Завершение записи
  }
};

Особенности подхода через ffmpeg:

  • Необходимо указывать точное окно или экран для захвата.
  • Можно настроить кодек, разрешение, fps.
  • Требует корректного завершения процесса, чтобы файл не оказался повреждённым.

Интеграция с Jasmine и Mocha

Для фреймворков Jasmine и Mocha video-репортеры часто используют хуки тестов:

  • beforeAll / beforeEach — запуск записи.
  • afterEach / afterAll — остановка записи и сохранение файла.

Пример с Jasmine:

describe('Тест с видео', () => {

  beforeAll(() => {
    browser.video.start(); // Кастомный метод start
  });

  it('Проверка страницы', async () => {
    await browser.get('https://example.com');
    expect(await browser.getTitle()).toEqual('Example Domain');
  });

  afterAll(() => {
    browser.video.stop();  // Кастомный метод stop
  });

});

Важно: для работы таких методов необходимо расширение объекта browser через глобальные утилиты.


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

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

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

function generateVideoName(testName) {
  const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
  return path.join('videos', `${testName}_${timestamp}.mp4`);
}

Такой подход облегчает поиск видео и автоматизацию CI/CD процессов.


Использование видео в CI/CD

Запись видео особенно полезна при запуске тестов в Jenkins, GitHub Actions, GitLab CI.

  • В Jenkins файлы сохраняются в workspace, после чего их можно прикрепить как артефакты.
  • В GitHub Actions видео сохраняется в артефакты workflow для последующего скачивания и анализа.
  • Совмещение с Allure Reports позволяет добавить ссылку на видео прямо в отчет.

Советы по качественной видеофиксации

  1. Фиксировать только проблемные тесты в больших наборах, чтобы экономить ресурсы.
  2. Использовать умеренный FPS (25-30) — обеспечивает баланс между качеством и размером файла.
  3. Автоматически удалять старые видео или хранить их ограниченное время в CI.
  4. Локальное тестирование с высокой частотой кадров полезно для анализа UI багов, но в CI можно снизить fps.
  5. Синхронизация с логами — желательно, чтобы название видео совпадало с лог-файлом теста, облегчая поиск причины падений.

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