[Тестирование IT-систем, Java] Home видео для Selenium aka WebDriver. Или чем записать экран, если у вас есть java, поломанные тесты и немного времени
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Решили мы на работе автоматизировать тесты для нескольких своих веб приложений. И кроме информации, когда упали тесты, захотелось еще и увидеть, как выглядела страница на этот печальный момент.
Я уже давно не брал в руки шашки и Selenium, поэтому пришлось немного покопаться в интернете и поискать, что в этой ситуации делают умные люди. Решение, которое меня устроило в итоге собрало несколько технологий: Java + Selenium + Junit + Allure + ffmpeg + VideoRecorder (by Pirogov), но поскольку я все таки честно копался, пытаясь найти лучшее решение проблемы, то нашел еще несколько альтернативных моему и более простых способов — как можно сделать слепок экрана.
Поскольку найденная информация, раскидана по всему интернету, то иметь некоторый сжатый конспект в одном месте было бы, считаю, неплохо. По сути статья получилась как небольшая вводная для новичков. Которые озабочены той же самой проблемой — посмотреть глазами что было или чего не было когда автотесты выкинули красный флаг.
Давайте посмотрим, что нам предлагают сделать.
Как получить скриншот экрана
Самый первый вариант, который можно придумать для нашей проблемы — снимать скриншоты экрана. Т.е. подгадать момент, когда тест свалится и получить картинку. Можно вообще на каждое действие снимать скриншот. Или снимать скриншот с некой периодичностью (например раз в полсекунды).
Способ 1. Selenium
Поскольку тесты многие пишутся на Selenium/WebDriver то было бы разумно использовать его методы. Например:
WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
Способ 2. Selenide
Второй способ использовать обертки для Selenium, например Selenide. Этоn фрейморк упрощает работу с драйвером и кроме всего прочего делает скриншоты при возникновении ошибки автоматически и сам. По умолчанию скриншоты складываются в папку “test-result/reports”.
Способ 3. java.awt.Robot
Следующий способ использовать вообще стандартный класс Java (с версии 1.3) для работы напрямую с операционной системой. Небольшой пример как может выглядеть подобный код:
BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(image, "png", new File("/screenshot.png"));
Способ 4. Использование внешних программ
Найти программу, которая делает скриншоты и использовать ее API. Такой способ конечно же есть, но в этом направлении я даже не копал.
Способ 5. Использовать облачные технологии
Если совсем на хочется заморачиваться, и деньги жгут ляжку вашему работодателю, то можно перейти на запуск тестов в облачных сервисах. Инфраструктура подобных сервисов вообще позволяет делать чудеса логирования, создания отчетов для запусков на разных операционных системах и в разных браузерах. В том числе доступно получения видео пройденных тестов. Сервисы не упоминаю специально — чтобы не рекламировать. Все гуглится.
Как получить видео экрана
С видео все несколько сложнее. Нельзя просто так взять и снять видео — нужно немного поплясать.
Есть два основных способа танцев:
- Наделать скриншоты и конвертировать их в видео (далее способ 1)
- Сразу снимать видео (далее способ 2 и 3)
Способ 1. Конвертация картинок в видео руками (на примере ffmpeg)
Для получения видео можно сделать скриншоты с периодичностью в полсекунды и потом свести их в одно видео. Например при помощи библиотеки ffmpeg (https://ffmpeg.org/)
Для файлов с расширенем PNG расположенных в одном каталоге команда может выглядеть так:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Можно добавить автоматизации и, например, сделать скрипт который запускает подобную команду по окончании тестов.
Способ 2. Рекордер видео — Monte Screen Recorder
Другой способ создания видео — миновать этап создания скриншотов и использовать рекордеры сразу.
Первым, на который я наткнулся, был Monte Screen Recorder и ниже следует небольшой пример использования Java обертки для этого рекордера (https://github.com/stephenc/monte-screen-recorder):
GraphicsConfiguration gc = GraphicsEnvironment
.getLocalGraphicsEnvironment()
.getDefaultScreenDevice()
.getDefaultConfiguration();
screenRecorder = new ScreenRecorder(gc,
gc.getBounds(),
new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE,
DepthKey, 24, FrameRateKey, Rational.valueOf(15),
QualityKey, 1.0f,
KeyFrameIntervalKey, 15 * 60),
new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black", FrameRateKey, Rational.valueOf(30)),
null,
new File(targetFolder));
screenRecorder.start();
Недостаток данного рекордера в том, что для просмотра видео вам понадобится установленный на компьютере кодек TSC (https://www.techsmith.com/products.html).
Способ 3. Рекордер — ffmpeg
Вторым рекордером на который я наткнулся, была наиболее известная и широко используемая библиотека ffmpeg. Я уже приводил пример как конвертировать картинки в видео. Для библиотеки есть несколько оберток. В итоге я остановился на github.com/SergeyPirogov/video-recorder-java.
Привлекла меня эта библиотечка тем, что обновления достаточно новые — значит проект живой и можно надеяться, что баги будут исправятся оперативно. Кроме этого обертка написана специально в поддержку нашей проблемы — снимать видео, когда тесты свалились. Самый простой способ использования — Java нотации Video(name = «second_test»)
Например:
@Test
@Video(name = "second_test")
public void videoShouldHaveNameSecondTest(){
Thread.sleep(1000);
assertTrue(false);
}
Главное нужно не забыть, что по умолчанию обертка использует кодек Monte, а не ffmpeg. Поэтому не забудьте переопределить формат видео в файле конфигурации (можно посмотреть как это делается на центральной Git странице проекта)
Выводов не будет. Для себя я выбрал VideoRecorder (by Pirogov), но без использования нотаций — а напрямую используя классы позволяющие стартовать и останавливать съемку видео. В следующей заметке планирую расписать этот способ
Было бы нечестно не сослаться на страницы, с которых честно украден код в исследовательских конечно же целях:
- www.ontestautomation.com/creating-a-video-capture-of-your-selenium-tests-using-monte-screen-recorder
- habr.com/ru/sandbox/67456
- stackoverflow.com/questions/24961127/how-to-create-a-video-from-images-with-ffmpeg
- github.com/stephenc/monte-screen-recorder
- habr.com/ru/sandbox/67456
P.S.: Если вдруг совершенно случайно у вас завалялись идеи что еще можно сделать — нижайшая просьба добавлять ссылками или текстом в комментариях. Спасибо.
===========
Источник:
habr.com
===========
Похожие новости:
- [Java] Скринкаст: простейший плагин для IntelliJ IDEA
- [Алгоритмы, Высокая производительность, Математика, Программирование] Динамическая балансировка нагрузки в pull-схеме
- [Big Data, Java, Scala] Big Data Tools EAP 10: SSH-туннели, фильтрация приложений, пользовательские модули и многое другое
- [.NET, ASP, C#, Программирование, Тестирование IT-систем] Я десять лет страдал от ужасных архитектур в C# приложениях — и вот нашел, как их исправить
- [JavaScript, ReactJS, TypeScript] Пишем свой CLI генерации React компонент, а может быть не только компонент, а может не только React
- [JavaScript, Программирование, Разработка веб-сайтов] JavaScript: область видимости простыми словами (перевод)
- [JavaScript, Node.JS, Разработка веб-сайтов] Безопасность npm-проектов, часть 1
- [Карьера в IT-индустрии, Тестирование IT-систем, Тестирование веб-сервисов] Что должен знать QA? Приглашаем на большой онлайн-интенсив с 1 октября
- [Разработка веб-сайтов, JavaScript, Программирование] 100 теоретических вопросов по JavaScript
- [JavaScript] Как использовать новейшие функции JavaScript в любом браузере (перевод)
Теги для поиска: #_testirovanie_itsistem (Тестирование IT-систем), #_java, #_java, #_video_recording, #_screenshot, #_selenium, #_webdriver, #_konspekt (конспект), #_dlja_novichkov (для новичков), #_testirovanie_itsistem (
Тестирование IT-систем
), #_java
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 07:59
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Решили мы на работе автоматизировать тесты для нескольких своих веб приложений. И кроме информации, когда упали тесты, захотелось еще и увидеть, как выглядела страница на этот печальный момент. Я уже давно не брал в руки шашки и Selenium, поэтому пришлось немного покопаться в интернете и поискать, что в этой ситуации делают умные люди. Решение, которое меня устроило в итоге собрало несколько технологий: Java + Selenium + Junit + Allure + ffmpeg + VideoRecorder (by Pirogov), но поскольку я все таки честно копался, пытаясь найти лучшее решение проблемы, то нашел еще несколько альтернативных моему и более простых способов — как можно сделать слепок экрана. Поскольку найденная информация, раскидана по всему интернету, то иметь некоторый сжатый конспект в одном месте было бы, считаю, неплохо. По сути статья получилась как небольшая вводная для новичков. Которые озабочены той же самой проблемой — посмотреть глазами что было или чего не было когда автотесты выкинули красный флаг. Давайте посмотрим, что нам предлагают сделать. Как получить скриншот экрана Самый первый вариант, который можно придумать для нашей проблемы — снимать скриншоты экрана. Т.е. подгадать момент, когда тест свалится и получить картинку. Можно вообще на каждое действие снимать скриншот. Или снимать скриншот с некой периодичностью (например раз в полсекунды). Способ 1. Selenium Поскольку тесты многие пишутся на Selenium/WebDriver то было бы разумно использовать его методы. Например: WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png")); Способ 2. Selenide Второй способ использовать обертки для Selenium, например Selenide. Этоn фрейморк упрощает работу с драйвером и кроме всего прочего делает скриншоты при возникновении ошибки автоматически и сам. По умолчанию скриншоты складываются в папку “test-result/reports”. Способ 3. java.awt.Robot Следующий способ использовать вообще стандартный класс Java (с версии 1.3) для работы напрямую с операционной системой. Небольшой пример как может выглядеть подобный код: BufferedImage image = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
ImageIO.write(image, "png", new File("/screenshot.png")); Способ 4. Использование внешних программ Найти программу, которая делает скриншоты и использовать ее API. Такой способ конечно же есть, но в этом направлении я даже не копал. Способ 5. Использовать облачные технологии Если совсем на хочется заморачиваться, и деньги жгут ляжку вашему работодателю, то можно перейти на запуск тестов в облачных сервисах. Инфраструктура подобных сервисов вообще позволяет делать чудеса логирования, создания отчетов для запусков на разных операционных системах и в разных браузерах. В том числе доступно получения видео пройденных тестов. Сервисы не упоминаю специально — чтобы не рекламировать. Все гуглится. Как получить видео экрана С видео все несколько сложнее. Нельзя просто так взять и снять видео — нужно немного поплясать. Есть два основных способа танцев:
Способ 1. Конвертация картинок в видео руками (на примере ffmpeg) Для получения видео можно сделать скриншоты с периодичностью в полсекунды и потом свести их в одно видео. Например при помощи библиотеки ffmpeg (https://ffmpeg.org/) Для файлов с расширенем PNG расположенных в одном каталоге команда может выглядеть так: ffmpeg -framerate 1 -pattern_type glob -i '*.png' \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Можно добавить автоматизации и, например, сделать скрипт который запускает подобную команду по окончании тестов. Способ 2. Рекордер видео — Monte Screen Recorder Другой способ создания видео — миновать этап создания скриншотов и использовать рекордеры сразу. Первым, на который я наткнулся, был Monte Screen Recorder и ниже следует небольшой пример использования Java обертки для этого рекордера (https://github.com/stephenc/monte-screen-recorder): GraphicsConfiguration gc = GraphicsEnvironment
.getLocalGraphicsEnvironment() .getDefaultScreenDevice() .getDefaultConfiguration(); screenRecorder = new ScreenRecorder(gc, gc.getBounds(), new Format(MediaTypeKey, MediaType.FILE, MimeTypeKey, MIME_AVI), new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, CompressorNameKey, ENCODING_AVI_TECHSMITH_SCREEN_CAPTURE, DepthKey, 24, FrameRateKey, Rational.valueOf(15), QualityKey, 1.0f, KeyFrameIntervalKey, 15 * 60), new Format(MediaTypeKey, MediaType.VIDEO, EncodingKey, "black", FrameRateKey, Rational.valueOf(30)), null, new File(targetFolder)); screenRecorder.start(); Недостаток данного рекордера в том, что для просмотра видео вам понадобится установленный на компьютере кодек TSC (https://www.techsmith.com/products.html). Способ 3. Рекордер — ffmpeg Вторым рекордером на который я наткнулся, была наиболее известная и широко используемая библиотека ffmpeg. Я уже приводил пример как конвертировать картинки в видео. Для библиотеки есть несколько оберток. В итоге я остановился на github.com/SergeyPirogov/video-recorder-java. Привлекла меня эта библиотечка тем, что обновления достаточно новые — значит проект живой и можно надеяться, что баги будут исправятся оперативно. Кроме этого обертка написана специально в поддержку нашей проблемы — снимать видео, когда тесты свалились. Самый простой способ использования — Java нотации Video(name = «second_test») Например: @Test
@Video(name = "second_test") public void videoShouldHaveNameSecondTest(){ Thread.sleep(1000); assertTrue(false); } Главное нужно не забыть, что по умолчанию обертка использует кодек Monte, а не ffmpeg. Поэтому не забудьте переопределить формат видео в файле конфигурации (можно посмотреть как это делается на центральной Git странице проекта) Выводов не будет. Для себя я выбрал VideoRecorder (by Pirogov), но без использования нотаций — а напрямую используя классы позволяющие стартовать и останавливать съемку видео. В следующей заметке планирую расписать этот способ Было бы нечестно не сослаться на страницы, с которых честно украден код в исследовательских конечно же целях:
P.S.: Если вдруг совершенно случайно у вас завалялись идеи что еще можно сделать — нижайшая просьба добавлять ссылками или текстом в комментариях. Спасибо. =========== Источник: habr.com =========== Похожие новости:
Тестирование IT-систем ), #_java |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 07:59
Часовой пояс: UTC + 5