Запуск Selenium тестов с помощью Hudson на Headless Linux Server, Часть 3 -- Настройка Hudson


(Mykhailo Poliarush) #1

Итак, у вас уже запущен Xvfb, и вы уже протестировали его сделав скриншот или три xclock. Сейчас нужно заставить его работать с тестами Selenium в ваших надстройках Hudson. Самым первым, моя работа была сделана в Selenium RC, в котором нужно запустить отдельный Selenium сервер, который ответственный за запуск браузеров и получающий команды от ваших тестовых скриптов, которые должны быть запущены в браузерах. Я не очень хорошо знаком с другими видами Selenium, поэтому не могу сказать, насколько похожей будет их установка.

Первое, Selenium должен знать какой браузер ему необходимо запустить и/или как его запустить или какой дисплей использовать. Если вы уже пользуетесь Selenium RC, вы знаете, что вам нужно передать название браузера в Selenium, чтобы указать какой браузер использовать. В любом случае, если обычно вы работаете в Windows, а Selenium не может найти Firefox или IE в вашем Linux, вам может понадобиться выполнение некоторых некоторых конфигураций. Обычная команда браузера для запуска Firefox - это "*firefox". У Selenium есть папки по-умолчанию в которых Selenium ищет файл запуска Firefox. Если она не может найти его, можно указать его вручную, например *firefox /usr/bin/firefox-bin. Это говорит Selenium о том, что нужно запустить Firefox и нужно использовать указанный путь. Вы должны указать путь к firefox-bin, а не только к скрипту firefox. Selenium проверить доступность скрипта или исполняемого двоичный код и если что программа сгенерирует исключительный случай. Также существует возможность просто передать путь и аргументы в Selenium, оставляя указатель "*firefox", но как говорится в документах, "Если же вы указываете собственный установленный пользователем браузер, правильность конфигурации будет зависеть только от вас. Как минимум вам нужно будет сконфигурировать ваш браузер для использования сервера Selenium в качестве прокси, и отключить все настройки браузера."

Очень просто сделать так чтобы Selenium использовал виртуальный дисплей. Установка переменной среды под названием "DISPLAY" в Linux говорит любому запускаемому графическому приложению запускаться на указанном дисплее, следовательно, дело только в том, чтобы правильно указать эту переменную для процессов сервера Selenium. Помните, что это сервер, ответственный за запуск браузера, поэтому именно тут должна быть доступна переменная DISPLAY. Если запускаете сервер с командной оболочки, можно сделать просто export DISPLAY=:5.0 перед запуском сервера. Естественно, вам необходимо будет убедиться в том, что числа совпадают с дисплеем и экраном, которые вы сконфигурировали в Xvfb. (См. первый пост из этой серии для более детальной информации.) Если вы запускаете сервер с Ant, просто добавьте сложноподчиненный элемент к target <jar> , что выглядит следующим образом:

{syntaxhighlighter brush: xml;fontsize: 100; first-line: 1; }<env key="DISPLAY" value=":5.0" />{/syntaxhighlighter}

В любом случае, помните, что если вы добавите это к вашему скрипту сборки, таким образом, вы привязываете всех пользователей Linux к этому дисплею. Это, наверное, не слишком хорошо.

В конце-концов, убедитесь, что Hudson управляет всемb задачами корректно. Это может быть наименьшей частью, так-как Hudson может инициировать скрипты командного процессора, цели Ant, задачи Maven, и множество других вещей. Убедитесь, что Xvfb работает или что Hudson запускает его. Убедитесь, что ваш сервер приложения /web container работает или что Hudson запускает его. Убедитесь, что любые другие вещи, от которых зависит ваше приложение, доступны, например база данных. Убедитесь, что Hudson компонует ваши веб приложения и использует их надлежащим образом. Убедитесь, что сервер Selenium работает или что Hudson запускает его. Затем, заставьте Hudson инициировать цель, задание или что-либо, что запускает ваш пакет для тестирования Selenium. Так-как тесты Selenium пишутся как обычные тесты с помощью JUnit или TestNG и т.д., это действительно не имеет никакого значения. Единственный каверзный момент во всем этом это то, что вам нужно будет убедиться в том, что тесты не начнутся, пока ваше приложение не будет полностью запущено. Вполне возможна ситуация, когда тестирование начинается еще до того, как URL для вашего приложения станет доступным на вашем веб сервере.

Вот и все! При запуске клиента Selenium, он будет сообщать команду «старт» серверу, который запустит браузер на виртуальном дисплее. Затем тесты будут проводится точно также как и обычно, отправляя команды серверу Selenium, а затем и браузеру, который делает НТТР запросы вашему веб серверу, на котором работают приложения которые Hudson запускает. Вы можете использовать xwd и xwud, как указано во втором посте , для того, чтобы делать и просматривать скриншоты браузеров, при проведении тестов. Супер идея, которую я внедрил в нашей среде, это установка листенера на фреймфорке для тестирования (я использовал ITestListener в TestNG), который будет делать скриншот каждый раз когда в тесте происходит сбой. Это даст вам исключительно полезный фидбэк, который вы сможете использовать проверяя ошибки.


Запуск remote webdriver на linux без иксов - проблема с экспортом системной переменой DISPLAY=:99
(Tatyana Durova) #2

А есть способ переключить выполнение тестов в обычный режим, обратно?


(heartwilltell) #3

Теме 4 года какбы.
Советую вам взглянуть в сторону Selenium Grid и Doсker контейнеров

https://github.com/SeleniumHQ/docker-selenium - вот уже готовые образы


(Tatyana Durova) #4

У меня уже стоит виртуалка на vagrant +chief + Xvfb + protractor + selenium, она меня во всем устраивает… докер это аналог vagrant?