Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Запись видео с помощью protractor-video-reporter

protractor
nodejs
video
reporting
jasmine
selenium
Теги: #<Tag:0x00007f7b690bf658> #<Tag:0x00007f7b690bf1f8> #<Tag:0x00007f7b690bef78> #<Tag:0x00007f7b690bebe0> #<Tag:0x00007f7b690be910> #<Tag:0x00007f7b690be6b8>

(Николай) #1

Привет.

Использую для автоматизированного тестирования protractor. Запуск идет под Windows.
Сейчас стоит задача видеозаписи прохода тестов в разных браузерах. Желательно, чтобы можно было настраивать запись по следующим параметрам:

  1. Полная запись всего тестового набора
  2. Отдельная запись упавших тестов
  3. Отдельная запись каждого сценария
  4. Включение / отключение субтитров

Все это умеет библиотека protractor-video-reporter.
Но вот никак не могу ее успешно прикрутить. Максимум что получается – это полный файл с субтитрами и пустой видеофайл.

Сделано:
1.вначале была проблемы запуска тестов, они валились с ошибкой, но это решение помогло: https://github.com/tomyam1/protractor-video-reporter/issues/1
2. прописал ffmpeg в PATH
3. скачал последний ffmpeg и указал его в параметрах protractor-video-reporter
ffmpegCmd: “d:\FFmpeg\ffmpeg.exe”
4. пробовал менять формат сохраняемого видеофайла

Заранее спасибо за ответы.

PS Если есть другие варианты реализации моей задачи, буду благодарен из услышать.


(Valentin Buryakov) #2

Добрый день, использовал эту бибилиотеку, на macOS и linux всё отлично работало, достаточно было установить ffmpeg. Возможно на видне нужно поиграться с параметрами ffmpegArgs и установив допольнительные кодеки.
Были ещё проблемы с записью в отдельные файлы, решал дл себя, поправив исходный код и cделал PR на это дело. Щас уже вроде пофиксили в новой версии, добавив переменную singleVideoPath, можно либо свою функцию передавать для формирования имени файла, либо использовать full.
По сути вам нужно сделать настраиваемыми эти опции в конфиге для репортера:
singleVideo, createSubtitles, saveSuccessVideos. Можете передавать их через перменные окуржения при запуске протрактора либо использовать таск-раннер grunt или gulp для которых уже есть расширения, где можно указывать переменные окружения grunt-env или по типу такого.

var videoReporter = new VideoReporter({
  baseDirectory: config.resultFolder + '/videos/',
  singleVideoPath: 'full',
  singleVideo: process.env.SINGLE_VIDEO || {some default value},
  saveSuccessVideos: process.env.SAVE_ALL_VIDEOS || {some default value},
  createSubtitles: process.env.SUBTITLES || {some default value}
  ffmpegArgs: [
    '-y',
    '-r', '30',
    '-f', 'x11grab',
    '-s', '1920x1200',
    '-i', process.env.DISPLAY || ':21.0',
    '-g', '300',
    '-vcodec', 'qtrle']
  });

(Сергей Кузьмин) #3

для java есть много video recorder plugin вариантов начиная с org.monte.screenrecorder.ScreenRecorder

Java

  • для Protractor существует несколько портов на Java

то же справедливо для .net


(Sergey Korol) #4

Там же в коде x11grab зашит. Вас это не смутило? Для винды наиболее вменяемым аналогом является gdigrab.

Ну и еще один момент касается остановки видео записи. В отличие от того же linux, на винде вы просто так не сможете отправить INT signal для корректной финализации процесса. Тут нужно отправлять ctrl + c сигнал и ждать. В зависимости от качества записи / доступных ресурсов / кол-ва потоков и т.п., это время может значительно отличаться. Т.е. если вы планируете сразу после завершения теста что-то делать с видео записью, придется подождать полного завершения ffmpeg процесса(-ов). Если только соответствующий код не поддерживает асинхронного режима.


(Сергей Кузьмин) #5

с monte , проверено - работает ( под windows).


(Sergey Korol) #6

У автора JS стек. А так, Monte неплох, но пишет в avi. Его не встроишь в тот же Allure, к примеру (кроме как обычной линкой).


(Николай) #7

Там же в коде x11grab зашит. Вас это не смутило? Для винды наиболее вменяемым аналогом является gdigrab

Вроде как не зашит. Запускают же как-то protractor-video-reporter на Windows.

Для винды наиболее вменяемым аналогом является gdigrab.

Так как не получается сторонние библиотеки, думаю пойти путем прямого вызова gdigrab. В Before передавать в консоль команду запуска записи, а в After команду окончания.

Тут нужно отправлять ctrl + c сигнал и ждать.

Подскажите как это сделать?


(Николай) #8

для Protractor существует несколько портов на Java

Не сталкивался с таким и не совсем понимаю как это работает. Можно установить эти библиотеки и каким-то образом использовать Java код рядом с JS?


(Sergey Korol) #9

Вот таким образом на разных платформах можно писать:

Так завершать:

Сам cmd тул для отправки ctrl + c сигнала можно скачать тут. Ему достаточно передать ffmpeg PID в качестве аргумета.


(Сергей Кузьмин) #10

в моем форке описано… https://github.com/caarlos0/jProtractor/README.md
(Using with existing Java projects)
мы поленились с юнит тестами и не попали на maven central - то есть чтобы jprotractor.jar искользовать надо его собрать . пробуйте. пишите если проблемы…

мой форк - https://github.com/sergueik/jProtractor

кстати я про это писал на codeproject - https://www.codeproject.com/articles/1066968/developing-protractor-tests-in-csharp-or-java
и хабре - https://habrahabr.ru/post/274413/


(Sergey Pirogov) #11

смысл так страдать, есть докеры уже умеют писать видео. Все эти рекордеры можно выкинуть в топку


(Valentin Buryakov) #12

Ну тут имелось в виду, чтобы делать видео по упавшим тестам или по некоторым тестам, которые интересуют по типу вашего video-recorder’a, вот было бы очень круто иметь такой для js-стека.


(Сергей Кузьмин) #13

а кстати объясните пожалуйста в чем преимущество docker решения перед vagrant / virtualbox если хост на windows или на osx ? docker же создает virtualbox инстанс с linux не проще ли сразу в нем пускать java + x server + browser + что по душе стек ?


(Sergey Pirogov) #14

Докер не создает виртуабокс инстанс, почитайте как работает докер - станет понятно


(Сергей Кузьмин) #15

как docker на linux работает вроде понятно. то есть в ваше конфигурации VirtualBox c Linux a.k.a. runDocker base рабоает постоянно - ?