- PVSM.RU - https://www.pvsm.ru -
Представляю вам перевод моей статьи [1] на Medium.com.
Selenium [2] сегодня является стандартом де-факто для автоматизации выполнения тестов в браузерах. Все популярные браузеры поддерживаются из коробки, а архитектура хорошо известна. Существуют даже компании, предоставляющие Selenium за деньги. Но удобен ли обычный Selenium сервер для локальной отладки тестов?
Как веб-разработчик или инженер по автоматизации тестирования вы можете столкнуться со следующими неудобствами при работе со стандартным Selenium сервером:
Приведенный выше список недостатков далеко не полный. Но давайте остановимся на этом и попробуем гораздо более удобный способ отладки Selenium-тестов локально.
В моей предыдущей статье (часть I [3], часть II [4]) я коротко описал новые открытые инструменты для работы с Selenium: Ggr [5] и Selenoid [6]. Ggr в основном нужен для больших Selenium кластеров и не нужен для отладки тестов на вашей машине. Сегодня я более подробно расскажу о Selenoid — альтернативной реализации Selenium хаба, которая запускает браузеры в Docker [7] контейнерах.
Но почему же запуск браузеров в контейнерах так удобен? И в чем разница между запуском браузеров из контейнеров, поставляемых разработчиками Selenium и Selenoid? — Основная идея Selenoid состоит в том, чтобы запускать новый контейнер для каждой Selenium сессии (т.е. запроса нового браузера) и останавливать их сразу же после закрытия сессии. Такой подход сразу же решает все проблемы связанные с залипанием состояния в кешах и использования одних настроек браузера в разных сессиях. В каждом контейнере находится конкретная версия браузера, правильная версия веб-драйвера или Selenium сервера, поддерживающая этот браузер и все зависимости наподобие шрифтов, графических библиотек и так далее. Более того, контейнеры обеспечивают достаточный уровень изоляции процессов браузеров. Это позволяет запускать неограниченное количество разлиных версий браузеров параллельно и забыть о проблемах с фокусом. Безусловно, эти же проблемы решаются и обычными Selenium контейнерами. Но для того, чтобы получить поведение, аналогичное Selenoid, в дополнение к Docker как правило требуется использовать сложные админские инструменты наподобие Ansible [8] или Salt [9].
Немного порекламировав Selenoid, настало время показать как просто с ним работать. Для того, чтобы получить работающий Selenium нужно выполнить 3 коротких шага:
Установить Docker [10]. Обычно это делается при помощи стандартного менеджера пакетов вашей операционной системы такого как APT [11], Yum [12] или Homebrew [13]. Подробности можно найти в документации [14] Docker.
Создать каталог для хранения конфигурации Selenoid и сгенерировать конфигурационный файл:
# mkdir -p /etc/selenoid
# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aerokube/cm:1.0.0 selenoid
--last-versions 2 --tmpfs 128 --pull > /etc/selenoid/browsers.json
Последняя команда также скачает образы Docker-контейнеров двух последних версий Firefox, Chrome и Opera и сгенерирует правильный файл конфигурации для Selenoid.
# docker run -d --name selenoid -p 4444:4444 -v /etc/selenoid:/etc/selenoid:ro
-v /var/run/docker.sock:/var/run/docker.sock aerokube/selenoid:1.1.1
Все — прошло 60 секунд и Selenoid готов к работе. Не нужно устанавливать Java и скачивать Selenium руками. Просто запустите свои тесты, используя тот же самый URL, что и у обычного Selenium server:
http://localhost:4444/wd/hub
Selenoid может использоваться совместно с Ggr для настройки большого Selenium кластера, поэтому у него нет графического интерфейса наподобие Grid Console в обычном Selenium. Посмотреть потребление браузеров можно двумя способами:
I. Запустить дополнительный легковесный контейнер с Selenoid UI. Это делается командой:
# docker run -d --name selenoid-ui --net host aerokube/selenoid-ui:1.0.0
Мордочка будет доступна в браузере по адресу http://localhost:8080/
:
II. Отправлять статистику Selenoid во внешнюю систему: Graphite [15], InfluxDB [16], ElasticSearch [17] и так далее. Статистика Selenoid может быть получена по следующему URL:
http://localhost:4444/status
Данные отправляются в виде JSON следующего формата:
$ curl http://localhost:4444/status
{
"total": 80,
"used": 14,
"queued": 0,
"pending": 1,
"browsers": {
"firefox": {
"46.0": {
"user1": 5,
"user2": 6
},
"48.0": {
"user2": 3
}
}
}
}
Selenoid возвращает сколько контейнеров может быть запущено одновременно (total), сколько запущено в данный момент (used), сколько запросов ожидают в очереди (queued) и сколько контейнеров еще стартуют (pending). Элемент browsers содержит информацию о потреблении браузеров различными пользователями. Имя пользователя извлекается из Basic HTTP headers, если они выставлены или выставляется в unknown, если нет. Хотя вы можете разбирать показанный JSON вручную при помощи скрипта, мы рекомендуем использовать для этой цели Telegraf [18]. Больше информации о том, как использовать Telegraf изложено в этом [19] разделе нашей документации.
Согласитесь, круто иметь инструмент, автоматически запускающий контейнеры с разными браузерами. Но еще круче иметь набор готовых контейнеров с разными версиями популярных браузеров. Мы проделали много работы и подготовили образы контейнеров с разными версиями Firefox, Chrome и Opera. Полный список можно посмотреть на selenoid@DockerHub [20].
Чтобы всегда иметь набор свежих версий браузеров нужно лишь время от времени выполнять команду:
# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aerokube/cm:1.0.0
selenoid --last-versions 2 --tmpfs 128 --pull > /etc/selenoid/browsers.json
Эта команда автоматически скачивает последние версии контейнеров и генерирует новую JSON-конфигурацию для Selenoid. Чтобы начать использовать новые браузеры отправьте Selenoid команду на перечитывание конфигурации (можно делать под нагрузкой):
# docker kill -s HUP selenoid
Наши контейнеры также поддерживают возможность установки произвольно разрешения экрана (по-умолчанию 1920x1080x24
). Чтобы выставить разрешение просто передайте capability screenResolution
:
screenResolution: "1280x1024x24"
В этой статье я рассказал как эффективно управлять различными браузерами при помощи Selenoid. Поверьте — работа с Selenium может быть комфортной. Если вам интересны вопросы построения эффективной инфраструктуры тестирования, вы можете взглянуть на другие открытые инструменты в нашей организации на Github [21] или подпишитесь на наш Твиттер @aerokube [22].
В благодарность автору замечательной картинки, посмотрите как ее рисовали [23].
Автор: Александр Андряшин
Источник [24]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/253666
Ссылки в тексте:
[1] статьи: https://medium.com/@aandryashin/selenium-done-in-60-seconds-176796f8bdc7
[2] Selenium: http://seleniumhq.org/
[3] часть I: https://hackernoon.com/selenium-testing-a-new-hope-7fa87a501ee9
[4] часть II: https://hackernoon.com/selenium-testing-a-new-hope-a00649cdb100
[5] Ggr: http://github.com/aerokube/ggr
[6] Selenoid: http://github.com/aerokube/selenoid
[7] Docker: http://docker.io/
[8] Ansible: http://ansible.com
[9] Salt: http://saltstack.com/
[10] Docker: http://docker.com/
[11] APT: https://wiki.debian.org/Apt
[12] Yum: https://fedoraproject.org/wiki/Yum
[13] Homebrew: http://brew.sh
[14] документации: https://docs.docker.com/engine/installation/
[15] Graphite: https://github.com/graphite-project/
[16] InfluxDB: https://github.com/influxdata/influxdb
[17] ElasticSearch: https://github.com/elastic/elasticsearch
[18] Telegraf: http://github.com/influxdata/telegraf/
[19] этом: https://github.com/aerokube/selenoid#sending-statistics-to-external-systems
[20] selenoid@DockerHub: http://hub.docker.com/u/selenoid/
[21] Github: http://github.com/aerokube
[22] @aerokube: http://twitter.com/aerokube
[23] как ее рисовали: https://www.youtube.com/watch?v=qo7KY2pMMDs
[24] Источник: https://habrahabr.ru/post/327184/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.