Прошло довольно много времени с момента нашей последней статьи об эффективной Selenium-инфраструктуре. Если вы находитесь в самом начале непростого пути Selenium — советую ознакомиться с нашими статьями про масштабируемый Selenium (часть I, часть II), Selenoid — универсальный инструмент для автоматизации тестов в браузерах (раз, два), Selenium под Windows (ссылка). Если вам больше нравятся мотивирующие рассказы — посмотрите видео моего доклада про масштабируемый Selenium на SeleniumConf Berlin 2017.
С момента публикации последней статьи в нашем сообществе произошло много интересного. Сегодня я хочу рассказать о самых важных возможностях, добавленных в наши инструменты за последние месяцы.
Ggr
Наш Selenium балансировщик получил несколько крутых улучшений.
- Во-первых, было добавлено API для определения хоста с браузерами по ID сессии. Это можно сделать вот таким HTTP-запросом:
$ curl -s http://test:test-password@my-ggr-host.example.com:4444/host/8e82f31f408b4a906f715228b5176efb0528ce32-66db-417f-8fa7-b12d85ce1ab5
{"Name":"my-hub-1.example.com","Port":4444,"Count":5,"Username":"","Password":""}
- Также была добавлена поддержка гостевых квот. Браузеры из гостевой квоты можно получить без указания имени пользователя и пароля. Оказывается удобным поддерживать небольшую песочницу, где новые пользователи могут пробовать запускать свои тесты, не изменяя их код. Включить гостевую квоту можно аргументами командной строки Ggr:
$ ./ggr -guests-allowed -guests-quota test <остальные флаги...>
При добавлении таких флагов любые браузеры из файла test.xml
будут доступны без указания пароля.
- Третья крутая штука — это возможность проксировать запросы во внешние сервисы наподобие SauceLabs, BrowserStack или TestingBot. Некоторые задачи тестирования, такие как тестирование в мобильных браузерах или тестирование мобильных приложений на устройствах, являются сложными с точки зрения поддержания тестовой инфраструктуры. Вы можете принять решение поддерживать основную часть браузерной инфраструктуры самостоятельно и пользоваться платными сервисами только для таких сложных случаев. Для того, чтобы перенаправить запросы во внешнюю систему просто укажите имя пользователя и пароль в XML файле:
<qa:browsers xmlns:qa="urn:config.gridrouter.qatools.ru">
<browser name="some-mobile-browser" defaultVersion="45.0">
<version number="45.0">
<region name="1">
<host name="ondemand.saucelabs.com" port="4444" count="1" username="test-user" password="my-password"/>
</region>
</version>
</browser>
</qa:browsers>
- Все наши инструменты, включая Ggr теперь компилируются версией Golang 1.9. Эта версия имеет гораздо более производительные алгоритмы сборки мусора, что дает значительное уменьшение времени ответа. Ggr теперь, действительно, летает.
- Самое важное изменение — это добавление поддержки проксирования VNC-данных. Если хосты из квот Ggr имеют запущенный на каком-то порту VNC-сервер (чтобы смотреть на экран браузера во время выполнения), то вы можете настроить Ggr так, чтобы иметь возможность получать доступ к VNC-данным по ID сессии. Без каких-либо изменений в квотах вы теперь можете использовать вот такие ссылки:
ws://test:test-password@my-ggr-host.example.com:4444/vnc/8e82f31f408b4a906f715228b5176efb0528ce32-66db-417f-8fa7-b12d85ce1ab5
Обратите внимание на протокол ws://
, означающий WebSocket. Используя VNC-клиента, поддерживающего передачу данных через веб-сокеты (например, noVNC) вы можете увидеть экран браузера любой запущенной сессии. По-умолчанию Ggr ожидает, что VNC-сервер запущен на стандартном порту 5900, но это можно перенастроить.
Selenoid
Наиболее многочисленные изменения были сделаны в нашем, как говорят, "флагманском" open-source продукте — Selenoid. Selenoid — это полноценная замена Selenium-хаба, запускающая браузеры в Docker контейнерах:
Больше Возможностей Настройки
Теперь вы имеете гораздо больше возможностей по настройке окружения браузера. Например, в конфигурационном файле вы можете задавать любые переменные окружения, записи файла /etc/hosts
и значение shmSize
для операционной системы внутри контейнера, где будет запущен браузер:
{
"firefox": {
"default": "46.0",
"versions": {
"46.0": {
"image": "selenoid/firefox:46.0",
"port": "4444",
"env" : ["TZ=Europe/Moscow"],
"hosts" : ["example.com:192.168.0.1"],
"shmSize" : 268435456,
}
}
}
}
Это позволяет, например, переопределять для каждой версии браузера часовой пояс или добавлять хосты из внутренней сети без изменения настроек DNS. В дополнение к этим настройкам вы можете изменять некоторые параметры отдельно для каждой запущенной сессии при помощи capabilities.
Новые Capabilities
1. Если вы запускаете несколько тестов параллельно, то, чтобы различить их в Selenoid UI, вы можете указать капабилити name
с произвольной строкой внутри:
name: "MyCoolTestName"
Вот как это выглядит в UI:
2. Если тестируемое приложение также запускается в Docker контейнере — вы можете автоматически связать (link) контейнер с браузером с контейнером приложения, указав его имя:
applicationContainers: my-application-container
3. Иногда требуется переопределить содержимое /etc/hosts
только для одного теста. Это можно сделать так:
hostsEntries: "some-host:192.168.0.1"
4. Наконец, чтобы переопределить часовой пояс для одной сессии — укажите:
timeZone: "Europe/Moscow"
Улучшения в Логировании
Мы добавили два важных улучшения в логирование:
1. Если браузеры запускаются в контейнерах — любые логи, отправленные в централизованное хранилище логов (такое как Amazon CloudWatch или Google Cloud logging), могут теперь быть помечены произвольной меткой. Значение метки указывается при помощи capability name
, о которой я писал в предыдущем разделе.
2. Если вы запускаете Selenoid без Docker — вы, наконец, можете включить логи веб-драйверов в логи Selenoid. Для того, чтобы это заработало, нужно добавить флаг -capture-driver-logs
при старте Selenoid:
./selenoid -conf ~/.aerokube/selenoid/browsers.json -capture-driver-logs
Образы с Браузерами
Мы пересобрали все образы с браузерами, добавив поддержку всех UTF-8 локалей и дополнительные шрифты для правильного отображения таких символов как:
- Китайские иероглифы
- Японские иероглифы
- Корейские иероглифы
- Хинди (деванагари)
- Тайский алфавит
Все эти изменения позволяют использовать новые образы для тестирования сайтов, переведенных на множество языков.
Selenoid UI
Мы полностью переделали внешний вид Selenoid UI — графического веб-интерфейса для Selenoid.
Наиболее часто используемые возможности такие как статистика использования браузеров и кнопки для просмотра сессий теперь располагаются на главной странице. Реже используемый экран выбора capabilities был унесен на отдельную вкладку.
Экран запущенного браузера и логи сессии теперь показываются на одной экране рядом друг с другом.
Configuration Manager
Configuration Manager — маленькое приложение, значительно упрощающее установку наших инструментов, стало еще более удобным. Теперь поддерживается возможность настройки Selenoid для работы с Microsoft Edge и Safari. Свежие версии CM работают без проблем на Windows 10. Вы также можете переопределить порт, на котором слушает Selenoid и Selenoid UI, например, чтобы одновременно запустить Selenium server и Selenoid.
Мы также сделали вывод CM приятным для глаза, раскрасив логи разными цветами.
Запись Видео
Вишенкой на торте является недавно добавленная возможность записывать видео браузерных сессий. В дополнение к возможности смотреть на экран браузера в реальном времени в Selenoid UI теперь стало возможно записать видео с экрана браузера и сохранить его в файле формата H264. Видео выглядит примерно так:
Для того, чтобы записать видео, просто добавьте одну capability в тесты:
enableVideo: true
По-умолчанию все записанные видео называются <sessionID>.mp4
, где <sessionID>
— уникальный идентификатор браузерной сессии, который можно легко вытащить из логов теста. Если вы хотите использовать свое имя — добавьте capability videoName
:
videoName: "my-cool-video.mp4"
Selenoid автоматически предоставляет доступ к каталогу с видео по HTTP. Чтобы открыть файл в браузере, используйте URL:
http://my-selenoid-host.example.com:4444/video/my-cool-video.mp4
Чтобы посмотреть весь список файлов — сотрите имя файла:
http://my-selenoid-host.example.com:4444/video/
Я надеюсь теперь у вас есть гораздо больше мотивации, чтобы настроить в своей команде действительно эффективную инфраструктуру Selenium. Поверьте, запуск тестов в браузерах может быть безболезненным! Если у вас есть какие-то вопросы — не стесняйтесь писать нам на почту, в Telegram-канал поддержки или отправляйте вопросы на StackOverflow тег. Если вы уже используете Kubernetes в своих процессах — вас также может заинтересовать наш новый продукт — Moon, который был специально разработан для развертывания эффективного кластера Selenium в Kubernetes и поддерживает все лучшее, что есть в Selenoid.
До новых встреч.
DSLow
Эм. А статья про Selenium или Selenoid все таки?
vaniaPooh Автор
Про Selenoid. Selenium здесь употребляется в широком смысле.