Быстрое знакомство с Selenoid

Что это

Selenoid — проект с открытым кодом на языке Golang. Часть команды — разработчики из России. Это один из вариантов контейнеризации параллельного запуска Selenium-тестов, дающий некоторые преимущества перед стандартным Docker/Selenium.

Как гласит официальное описание проекта,

«Selenoid — это мощная реализация Selenium hub, использующая контейнеры Docker для запуска браузеров».

Особенностью Selenoid является предоставление отдельного окружения-контейнера для каждого теста:

При запуске теста создается контейнер, тест выполняется в нем, и контейнер удаляется.

Если же вместо этого использовать docker-selenium, то для всего тестового набора используются одни и те же контейнеры, что может привести к нестабильным или противоречивым результатам, что является распространенной проблемой автоматизации.

Конфигурация

Прежде всего, необходимо установить docker на свою машину. Для установки можно воспользоваться официальной документацией [там на Ubuntu]. В основном применяются три конфигурации.

* https://github.com/aerokube/cm/releases

** https://github.com/aerokube/selenoid/releases

Загрузить cm в среде Linux, не поддерживающей GUI, можно с помощью приведенного ниже кода:

LATEST_BINARY_URL=`curl -s \
https://api.github.com/repos/aerokube/cm/releases/latest | \
grep "browser_download_url" | grep linux | cut -d : -f 2,3 | tr -d \"`

curl -L -o cm  $LATEST_BINARY_URL
chmod +x ./cm

Примечание: для Chrome-образов в файле browser.json используется "/" вместо "/wd/hub"

Можно или запустить selenoid в docker-контейнере, или как отдельный бинари-файл.

При запуске cm сначала проверяет, есть ли docker. Если находит docker, загружает нужные docker-образы. Если docker не установлен, то загружаются standalone-бинарники.

Все, установка готова, но у нас нет UI-интерфейса.

У Aerokube [компании, разработавшей Selenoid] есть еще один проект с открытым кодом под названием selenoid-ui. Это пользовательский интерфейс, позволяющий отслеживать происходящее во время выполнения теста. Для запуска selenoid-ui можно воспользоваться командой cm:

В качестве альтернативы можно загрузить бинарник selenoid-ui, дать разрешение на выполнение и запустить его.

Проверяем http://localhost:8080

Если все нормально, увидим следующее:

В этой панели выводятся активные сессии, очереди выполняемых тестов. При успешном выполнении тестов на UI-панель должна выглядеть следующим образом:

Теперь можно остановить его командой: ./cm selenoid stop

Другие команды cm:

Дополнительная конфигурация

Выше показаны основные возможности. Теперь посмотрим, что еще доступно в cm. Например список доступных флагов можно получить с помощью команды ./cm selenoid args

Как видим выше, много вариантов действий. Но большинство из них недоступны из cm, поскольку они hardcoded в менеджере конфигураций. Поэтому будем вручную настраивать эти конфигурации.

Допустим, нам нужно запустить тесты, но:

  • С конфиг-файлом браузера в другой папке,
  • Ограничим максимальное количество параллельных сессий,
  • Изменим папку вывода видео,
  • Ограничим использование памяти и процессора.

Для этого запускаем следующей командой:

docker run -d --name selenoid                     \
-p 4444:4444                                    \
-v ~/.aerokube/selenoid/:/etc/selenoid/:ro      \
-v /var/run/docker.sock:/var/run/docker.sock    \
aerokube/selenoid:latest-release                \
-conf /etc/selenoid/browsers.json -limit 10 \
-video-output-dir /opt/selenoid/video/ -mem 1g -cpu 1.0

То есть просто добавляем это в конец команды docker.

Примечание: Если используете бинарник selenoid вместо образа docker, то аргументы передаем так:

./selenoid -conf /etc/selenoid/browsers.json \
-limit 10 -video-output-dir /opt/selenoid/video/ \
-mem 1g -cpu 1.0

Параллельные сессии

По умолчанию лимит параллельных сессий равен 5, но можно переопределить больше. Сколько тестов можно запускать параллельно?

Aerokube рекомендует максимальное количество параллельных сессий по формуле: 

Количество ядер * 1,5 — 2

Если сильно превысить это значение, может случиться следующее:

Примечание: это касается не только Selenoid, все остальные решения тоже не очень. Если возникла реальная необходимость параллельного запуска большого количества тестов:

  • Апгрейдить оборудование
  • Кластерное решение типа Ggr [это тоже проект Aerokube]
  • Облачное решение типа Sauce Labs или Testinium

В любом случае варианты есть.

Другие функции

В Selenoid предусмотрены специальные возможности, которые можно активировать в своих тестах.

Live Browser Screen

Возможность визуальной отладки параметром -vnc

./cm selenoid start -vnc

Он загружает образы, включенные в VNC, и запускает Selenoid. Не забудьте включить enableVNC, в данном случае:

ChromeOptions options = new ChromeOptions();

options.setCapability("enableVNC", true);

Теперь сессии Chrome могут работать с VNC.

Примечание: Если используется последняя версия, можно использовать VNC, даже если у вас нет VNC-образов. Команда Aerokube решила, что два образа занимают всего 10 Мб и нет смысла поддерживать два типа образов. Я пробовал использовать selenoid/chrome (tag: 67), и это работало.

Кастомные имена тестов

Можно задать имя сессии, установив «name«, в моем случае:

ChromeOptions options = new ChromeOptions();

options.setCapability("name", testName);

Запись видео

Примечание: Для этого нужно иметь video-recorder image. Если его нет, воспользуйтесь приведенной ниже командой для извлечения изображения:

$ docker pull selenoid/video-recorder

В Selenoid есть видеозапись, ее можно активировать, передав характеристике enableVideo значение true:

ChromeOptions options = new ChromeOptions();

options.setCapability("enableVideo",true);

Видео хранится в папке ~/.aerokube/selenoid/video

Имя видео, частота кадров, разрешение экрана и частота кадров — настраиваются.

videoName : string

videoScreenSize : string

videoFrameRate : int

Разрешение экрана

Разрешение экрана задается так:

screenResolution: <width>x<height>x<colors-depth>

Кроме перечисленных, есть и другие тонкие настройки, такие как PerSession Timezone, PerSession Environment variables, Custom DNS Server и пр.

Итак

Selenoid является альтернативой Selenium Grid и docker-selenium. Он обеспечивает гибко настраиваемую среду выполнения. Основная фича: создает отдельную сессию браузера для каждого теста. Также существует активное комьюнити.


Источник

Автоматизация в Телеграме

Какой была ваша первая зарплата в QA и как вы искали первую работу?

Мега обсуждение в нашем телеграм-канале о поиске первой работы. Обмен опытом и мнения.

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Мы в Telegram

Наш официальный канал
Полезные материалы и тесты
Готовимся к собеседованию
Project- и Product-менеджмент

? Популярное

? Telegram-обсуждения

Наши подписчики обсуждают, как искали первую работу в QA. Некоторые ищут ее прямо сейчас.
Наши подписчики рассказывают о том, как не бояться задавать тупые вопросы и чувствовать себя уверенно в новой команде.
Обсуждаем, куда лучше податься - в менеджмент или по технической ветке?
Говорим о конфликтных ситуациях в команде и о том, как их избежать
$1100*
медианная зарплата в QA в июне 2023

*по результатам опроса QA-инженеров в нашем телеграм-канале

Собеседование

19%*
IT-специалистов переехало или приняло решение о переезде из России по состоянию на конец марта 2022

*по результатам опроса в нашем телеграм-канале

live

Обсуждают сейчас