Как приручить Selenoid, работая на винде? Пошаговая инструкция от TechLead’a отдела тестирования NoveoNsk Натальи.
Вместо предисловия сразу хочу отметить, что, скорее всего, статья будет интересна в первую очередь ребятам, мало знакомым с консолью и docker. Возможно, есть путь проще и быстрее, но я в первую очередь хочу помочь интересующимся коллегам не наступить на протестированные мной грабли и не потратить кучу времени на поиски.
Когда я попыталась самостоятельно запустить свои Java-тесты в Docker-контейнере, я столкнулась с основной проблемой: нужно достаточно хорошо разбираться в командах Linux.
После прочтения кучи гайдов легче не становилось: вроде бы и команды приводят простые и понятные, да еще и с пояснениями, но мне как стороннику нормального UI (киньте в меня тапками, но и гитом я пользуюсь не в консоли) никак не удавалось сдвинуться с мертвой точки. Контейнер ставится, dockerfile сформирован, а дальше-то что делать? Задача программиста — сделать жизнь бизнеса и его участников проще и понятнее, но почему же, как говорится, сапожник без сапог?!
После безуспешных попыток я наткнулась на фреймворк Selenoid (хотя и раньше встречала его в QA-шных блогах). Все блоги пестрили посвященными ему заголовками: запускаем тесты в docker-контейнерах за ДВЕ команды. Кроме того, основная задача фреймворка в том, чтобы быстро и без потребления лишних ресурсов запускать тесты параллельно в разных браузерах. Хм, почему бы и не попробовать?
И тут снова та же проблема: указанные две команды Windows-консоль в упор не понимает. И статьи «Selenoid за 5 минут» твердят одно и тоже, не упоминая, что команды ну никак не для системы Microsoft :(
В общем и целом после полутора часов поисков я таки нарыла статью действительно для чайников и для человеческой ОС!!!
Начнем:
- Ставим докер https://www.docker.com/products/docker-desktop, запускаем.
- Качаем Configuration manager — https://github.com/aerokube/cm/releases/tag/1.7.2 (скачаный файл для простоты переименовываем в cm.exe или как вам больше нравится).
- Открываем консоль (все-таки без нее пока никак) и выполняем в директории с нашим файлом команду
cm.exe selenoid start --vnc
.
В результате выполнения команды./cm.exe selenoid start--vnc
произойдёт загрузка образов с VNC-сервером, то есть образов, в которых доступна возможность видеть экран браузера в реальном времени. Также в процессе выполнения этой команды будет скачана свежая версия Selenoid вместе с контейнерами, исполняемые файлы веб-драйверов, будут созданы файлы конфигурации и последним этапом будет сразу же запущен сам Selenoid. - Далее выполняем
cm.exe selenoid-ui start
.
Командойcm.exe selenoid-ui start
мы скачиваем и запускаем Selenoid UI – графическую оболочку, через которую мы можем посмотреть ход выполнения наших тестов в реальном времени, видеозаписи выполнения сценариев и примеры конфигурационных файлов, собрать какую-то статистику и т.д. Фуух, хоть какой-то интерфейс :)
В браузере набираем http://localhost:8080/#/ и тадам, что-то есть) Хотя судя по сообщению, все не так радужно и двумя командами все-таки не обойтись…
Естественно, судя по скрину, как обычно возникают проблемы. После некоторых поисков (похоже, проблема не очень стандартная) был найден следующий алгоритм действий (описываю все-все шаги для людей, не работающих с консолью):
docker ps
— узнаем название запущенных контейнеров, шаг не обязательный;docker stop aerokube/selenoid:latest aerokube/selenoid-ui:1.10.0
(это имена ваших контейнеров для Selenoid) — останавливаем контейнеры;docker rm aerokube/selenoid:latest aerokube/selenoid-ui:1.10.0
— удаляем контейнеры;cm.exe selenoid cleanup
— чистим все созданные конфигурации;Run in powershell > docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v ${HOME}:/root -e OVERRIDE_HOME=${HOME} aerokube/cm:latest-release selenoid start
— запускаем конфигурирование заново.
И снова запускаем (в дальнейшем этими командами также можно запускать контейнеры):
cm.exe selenoid start --vnc
— сам селеноид,
cm.exe selenoid-ui start
— его интерфейс на локалхосте.
Дорабатываем и наши тесты. Мои тесты на Java+Selenide. Чтобы запустить их в Selenoid, нужно доработать метод setup:
@BeforeAll
public static void setUp() {
//Url удалённого веб-драйвера
Configuration.remote = «http://localhost:4444/wd/hub»;
//Определяем, какой браузер будем использовать
Configuration.browser = «chrome»;
//Размер окна браузера
Configuration.browserSize = «1920×1080»;
//Создаём объект класса DesiredCapabilities, используется как настройка вашей конфигурации с помощью пары ключ-значение
DesiredCapabilities capabilities = new DesiredCapabilities();
//Включить поддержку отображения экрана браузера во время выполнения теста
capabilities.setCapability(«enableVNC», true);
//Включение записи видео в процессе выполнения тестов
capabilities.setCapability(«enableVideo», true);
//Переопределяем Browser capabilities
Configuration.browserCapabilities = capabilities;
}
Наконец-то все заработало и тесты стали отрабатывать. Результат может выглядеть примерно вот так (тестов и ресурсов ПК у меня не очень много, но позволяет понять в масштабе):
Итак, мы научились гонять наши тесты на локальной машине (c Windows) в docker. Теперь мы как тру автоматизаторы должны интегрировать их в CI проекта. Но об этом — в одной из следующих статей :)
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: