Решил снова начать вести блог по тестированию и для привлечения внимания надо было сделать кликбейтный заголовок для статьи 😀
На самом деле мой коллега сделал внутренний доклад по Selenoid в нашей компании. Я позаимствовал этот заголовок и часть материала для статьи.
В далеком 2017 году я писал про настройку Selenium Grid тут. И весь 2017 — 2018 мы использовали обычный Selenium Grid без каких-либо надстроек.
Как у нас всегда выглядело распараллеливание
У нас была тачка на котрой был запущен selenium hub. У нас были 20 тачек, на которых были запущены selenium nod-ы. Обычные 20 виртуалок с windows, в которых в автозапуске был настроен bat файл, в котором запускался selenium server в режиме node и коннектился к запущенному хабу. На тачке с хабом также было настроено, что при каждом запуске стартовал selenium server в режиме hub.
Соответственно, если нужно было обновить драйвера для браузеров, нужно было заходить на каждую из 20 виртуалок, качать драйвер, точно такая же ситуация была с браузерами. Плюс сам процесс отладки автототестов на удаленной тачке был тем еще весельем.
Но обо всем этом мы забыли, когда перешли на Selenoid. Слышали мы про Selenoid давно, жаль раньше не стали использовать. Теперь весь процесс у нас выглядит так:
Запускается джоба на дженкинсе, на одной тачке с селенойдом создаются в параллель пул docker контейнеров, в которых старуют браузеры с автотестами.
Selenoid — это сервер, который позволяет запускать браузеры в docker контейнерах.
Установка Selenoid
curl -s https://aerokube.com/cm/bash | bash \ && ./cm selenoid start —vnc
Или скачать configuration manager с сайта aerokube и использовать команду: ./cm selenoid start —vnc ./cm selenoid start —browsers
‘firefox:51.0;firefox:55.0;chrome:66.0’ — если требуются определенные браузеры
После выполнения одной из команд сверху начнется скачивание образов браузеров, создание browsers.json и selenoid автоматически запустится.
Лимит сессий в этом случае будет равен пяти.
Если требуется задать большее количество сессий, требуется явно указать лимит: ./cm selenoid start —args «-limit 10» Также поднимаем UI: ./cm selenoid-ui start Selenoid работает на порту 4444. Selenoid-UI — 8080
Обновление Selenoid
./cm selenoid update
Конфигурация Selenoid
Selenoid конфигурируется посредством внесения изменений в файл browsers.json
1.Название браузера
2. Дефолтная версия браузера
3. Лист доступных версий браузеров
4. Версия браузера
5. Имя образа
6. Порт для прокси соединений
7. Добавление tmpfs к контейнеру (переносим кэш браузера в in-memory файловую систему, ускоряет работу)
8. URL, где создается новая сессия (в нашем случае хаб)
9. Параметр, позволяющий указать том, который будет монтироваться в контейнер из хостмашины
10. Environmental Variables (в данном случае таймзона)
11. Параметр позволяет добавить кастомную запись в /etc/hosts к запущенному контейнеру
12. Размер Shared Memory
13. Лимит ядер на контейнер
14. Лимит оперативной памяти на контейнер
UI Selenoid
Через Selenoid UI можно подключаться в реальном времени к работающему контейнеру для отладки. Также можно смотреть логи вебдрайвера и браузера. Браузером в этот момент можно управлять, без попыток угадать, на какой конкретно машине в данный момент проходит тест. (Слезно вспоминаю работу с Selenium Grid без Selenoid).
И того, следюуще плюсы Selenoid
● Установка в пару команд
● Гибкая работа с браузерами
● Легкое масштабирование
● Удобный UI и логирование
● Готовые образы контейнеров вместе с вебдрайвером
● Легкое обновление, одна команда и у вас на всех новых создаваемых контейнерах последние версии браузеров, драйверов.
● Каждый браузер изолирован от системы
● Каждый браузер запускается чистым
● 60мб потребление RAM
● Golang
Еще куча разных возможностей есть у selenoid, о которых можно прочитать на сайте разработчика https://aerokube.com/selenoid/
Итог
Сложно даже представить насколько нам упростил работу Selenoid, учитывая что ui автотесты на selenium мы используем каждый день очень активно. С Grid-ом это было непросто, нужно было постоянно заходить на каждую из 20 тачек, обновлять браузеры, драйвера, отладка тестов была сложна.
Сейчас же у нас одна мощная така для Selenoid, на которой при запуске джобы в дженкинсе создаются 40-80 контейнеров параллельно и на них ходят автотесты. Более того, стабильность тестов тоже стала выше, так как повторюсь, что создается новый контейнер, запускается чистый браузер, в нем проходит автотест, для другого автотеста создается другой контейнер и т д. То есть автотест запускается в максимально изолированной среде. Всем, кто до сих пор использует обычный Selenium Grid и у кого уже прилично автотестов, всячески рекомендую переходить на Selenoid.