Selenium server: SeleniumHQ Browser Automation
запуск браузера на удаленной машине — Блог вебразработчика
Свежие записи
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing.
Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing.
Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing.
Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus commodo non ut metus. Nunc id eros ut augue consequat tempus ut non ligula. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, tortor vitae pulvinar mattis, orci neque porta tortor, a feugiat nisi lacus quis diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend in auctor enim cursus. Nullam fermentum pretium risus, in hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut tortor velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing.
Proin mattis faucibus facilisis. Integer non lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada consequat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Использование Selenium сервера для автоматизации работы с внешними ресурсами
Прочитав заглавие статьи, Вы, наверняка, зададитесь вопросом «А зачем это нужно?» с последующими утверждениями, что «это же медленно!», да и вообще «это же совсем не целевое использование такого замечательного средства для тестирования как Selenium server». Всему свое время и, в этой небольшой статье я попытаюсь ответить на ваши вопросы.
Начнем с того, что кратко расскажем, что же такое Selenium и для чего он нужен. Главным образом Selenium — это инструмент для автоматизации тестирования Web-приложений, как проект был начат в июне 2004 года и на текущий момент включает несколько инструментов. В совокупности набор инструментов Selenium предоставляет богатый набор возможностей для тестирования Web-приложений различных типов. Ключевыми особенностями Selenium является возможность запуска в различных браузерах и использование нескольких типов селекторов для идентификации элементов страницы (например, XPath или CSS селекторы).
Набор инструментов Selenium
Selenium включает несколько инструментов с разным назначением:
Selenium 2 (или Selenium Webdriver)
Новое направление развития проекта Selenium: результат слияния двух проектов WebDriver и Selenium1. Каждый из этих продуктов обладал своими достоинствами, поэтому разработчики пришли к мысли слияния проектов для получения более надежного и развитого инструмента автоматизации.
Selenium 1 (или Selenium Remote Control)
На протяжении длительного времени Selenium RC был основным направлением развития проекта, пока в результате слияния WebDriver и Selenium не появился Selenium 2, более новый и мощный инструмент, однако Selenium 1 все еще активно поддерживается.
Selenium IDE
Представляет собой инструмент для разработки и создания прототипов тестовых сценариев. Это плагин для браузера Firefox, с простым и удобным интерфейсом для создания автоматизированных тестов.
Selenium Grid
Selenium Grid позволяет масштабировать большие тестовые наборы, а также запускать тесты, которые необходимо выполнить в нескольких окружениях. Selenium Grid позволяет запускать тесты параллельно, то есть разные тесты могут быть запущены в одно и то же время на нескольких удаленных машинах.
Использование Selenium не в целях тестирования в реальном проекте
В качестве примера рассмотрим реальный проект по реализации одной крупной Web-системы, которая должна была взаимодействовать с большим количеством внешних ресурсов. О внутренней структуре и организации сторонних ресурсах мы ничего не знаем, хотя спокойно можем создать в них новый аккаунт или можем использовать уже существующий с помощью предоставляемого web-интерфейса. Реализуемая система кроме этого представляла собой «агрегатор аккаунтов» сторонних ресурсов и способна была выполнять определенный набор операций над ними. По большей степени набор операций был одинаков для всех сторонних ресурсов. Операции выполнялись с помощью использования предоставляемого ресурсом API, но при добавлении очередного ресурса в систему разработчики столкнулись с проблемой ограниченности и недостаточности API, кроме того некоторые ресурсы не предоставляли ровным счетом никакого API, а включить их в создаваемую систему было просто необходимо.
Таким образом, одни ресурсы предоставляли довольно хорошую реализацию API, с полным набором необходимых методов, другие же либо имели скудное API с ограниченными возможностями, либо не имели его вообще. Кроме этого, предоставляемое ресурсами API зачастую имело разный интерфейс и требовало использование дополнительных специфических библиотек, включение которых в проект, значительно увеличивало его размер, поэтому говорить о каком-то стандартном методе использования API речи и не шло. Единственный вариант общей реализации в этом случае заключался в имплементации набора адаптеров для каждого нового ресурса.
Поэтому возникла идея использования «Selenium-подхода». Действительно, мы ведь можем сымитировать действия пользователя на стороннем ресурсе. Запустить реальный браузер, забить значения в поля, сделать необходимую цепочку переходов и выйти из аккаунта.
Конечно, вы скажете, что можно анализировать и разбирать запросы. Зачем поднимать сервер для этого? Это же медленно! Гораздо проще проанализировать пары каждого запроса в цепочке переходов и реализовать их с помощью какой-нибудь CURL-based библиотеки на сервере. Ответ будет довольно простым, из личного опыта разработчиков системы следует вывод: во-первых, разработка в этом случае затягивается, по причине довольно сложных запросов и ответов, средств защиты, например:
- Наличие различных проверочных hash-значений в запросах
- JS-based cookies
- Последовательность пересылок при переходе
- Большое количество ajax-запросов
- Проверка специфических заголовков запроса
Во-вторых, внешние ресурсы часто что-то меняют, и оперативно внести изменения в реализуемую систему гораздо проще и быстрее в случае «Selenium»-подхода, чем в “переанализе» request/response-пар.
Итак, подытожим причины:
- Ограниченность или отсутствие API;
- Существенное различие интерфейсов API и требование дополнительных библиотек;
- Сложность анализа и разбора отсылаемых запросов и получаемых ответов;
- Механизмы защиты внешних ресурсов и специфика их внутренней реализации;
- Быстрота внесения изменений и разработки в целом;
Но что же со временем и стабильностью исполнения, скажете вы? Единственное действительно уязвимое место данного подхода. Использование данного подхода имеет смысл для автоматизации действий, не критичных ко времени исполнения, возможно, массовые действия с использованием очереди. Время исполнения той или иной операции с использованием Selenium-подхода всегда можно оптимизировать, как это было сделано и в реализуемой системе. Что касается стабильности, то ее тоже довольно легко можно вывести на приемлемый уровень путем реализации дополнительных компонент, направленных на увеличение стабильности работы с Selenium-сервером, занимающихся мониторингом процессов, так или иначе связанных с работой Selenium-сервера. Кроме того, в сети можно найти большое количество статей о том, как ускорить работу Selenium-сервера.
Установка и настройка Selenium-сервера
Рассмотрим на примере CentOS последовательность шагов по установке и настройке Selenium-сервера, с последующим его использованием в PHP:
- Устанавливаем Java:
yum install java;
- Скачиваем виртуальный буфер для эмуляции иксов:
yum install Xvfb;
- Пишем скрипт демонизации для xvfb (прилагаться не будет):
/etc/init.d/xvfb
- Меняем параметры и запускаем:
chmod +x /etc/init.d/xvfb chkconfig xvfb on service xvfb start
Качаем Selenium (версия может отличаться на момент развертывания сервера):
cd /usr/local/lib/selenium wget http://selenium.googlecode.com/files/selenium-server-standalone-2.20.0.jar mkdir -p /var/log/selenium/ chmod a+w /var/log/selenium/
Пишим скрипт загрузки (прилагаться не будет):
/etc/init.d/selenium
Не забудьте параметры, необходимые для полноценного использования Selenium-сервера:
PARAMS="-disable-web-security -ignore-certificate-errors -interactive -multiWindow -trustAllSSLCertificates"
Запускаем Selenium:
chmod +x /etc/init.d/selenium chkconfig selenium on service selenium start
Ставим браузер (рекомендации: лучше google chrome, не забудьте сперва добавить репу /etc/yum.repos.d/google.repo):
yum install google-chrome-stable
Возможно вам придется добавить WebDriver для браузера Google Chrome:
PARAMS="-disable-web-security -ignore-certificate-errors -interactive -multiWindow -trustAllSSLCertificates - Dwebdriver.chrome.driver=/var/….. /chromedriver"
Ставим PHPUnit:
yum install php-pear pear install phpunit/PHPUnit_Selenium
Добавьте каналы:
pear channel-discover pear.phpunit.de pear channel-discover pear.symfony-project.com pear channel-discover components.ez.no
Добавляем возможность работы с Selenium-сервером из PHP:
pear install -a Testing_Selenium-0.4.4
Итог
Использование Selenium сервера для автоматизации действий пользователя не в целях тестирования имеет смыл в проектах, не критичных ко времени исполнения. Очевидные плюсы заключаются в простоте разработки и внесении изменений — не нужно анализировать каждый запрос. Отличное «расширение» существующего API до требуемого уровня 😉
Selenium, Selenoid, Selenide, Selendroid… Что все это значит?
Автор: Виталий Котов
В мире автоматизации новичку ориентироваться довольно сложно. Приходится узнавать множество понятий, разбираться в особенностях существующих инструментов. Например, вот: Selenium, Selenide, Selenoid, Selendriod — что это, чем отличается? Да и можно ли их сравнивать?
Написал статью, чтобы помочь в этом разобраться. Кому интересно, добро пожаловать под кат!
Selenium
Selenium — это инструмент для автоматизированного управления браузерами.
В рамках проекта Selenium разрабатывается серия программных продуктов с открытым исходным кодом:
- Selenium Server,
- Selenium Grid,
- Selenium IDE и т.д.
Selenium Server – это программа, которая позволяет управлять браузерами с помощью специальных драйверов. Она должна находиться на том же компьютере, что и браузер, с которым нам предстоит работать.
После установки Selenium Server к нему можно обращаться с другого компьютера для удаленного управления браузерами по специальному протоколу, который написан поверх HTTP.
Коротко — Selenium Server помогает управлять браузерами на определенной машине.
Более подробно можно почитать здесь: https://www.seleniumhq.org/
Selenium Grid устанавливается на одном компьютере и может работать удаленно с несколькими другим, на которых установлены Selenium Server.
Он создан для того, чтобы запускать тесты на большом количестве машин, обращаясь только к одной, на которой установлен Selenium Grid.
Для создания сессии (т.е. запуска браузера) мы всегда будем приходить на компьютер, где стоит Selenium Grid. Он уже сам решит, какая машина менее нагружена для этого и туда и перенаправит команду.
Все машины, с которыми работает Selenium Grid, могут работать под управлением разных операционных систем, на них могут быть установлены разные браузеры.
Коротко — Selenium Grid нужен для организации работы с несколькими машинами, где установлен Selenium Server.
Более подробно можно почитать здесь: https://www.seleniumhq.org/docs/07_selenium_grid.jsp
Selenium IDE – это плагин к браузеру Firefox, с помощью которого можно записывать и воспроизводить действия пользователя.
Он не имеет особого отношения ни к Selenium Server, ни к Selenium Grid и позволяет работать только с локальным браузером.
Более подробно можно почитать здесь: https://www.seleniumhq.org/selenium-ide/
Selenide
Selenide — это один из фреймворков для автоматизированного тестирования веб-приложений. С его помощью можно быстро и относительно просто писать код, который будет формировать и отправлять HTTP-команды на Selenium Server или Selenium Grid.
Он заточен под то, чтобы писать такие сценарии, которые будут проверять работу веб-приложения: поиск нужных элементов, проверка событий, взаимодействие с UI и так далее.
Несмотря на схожесть названия с линейкой программ Selenium, сам Selenide разрабатывают другие ребята.
Коротко — с Selenide проще писать код, который заточен именно под тестирование веб-приложения.
Более подробно можно почитать здесь: https://ru.selenide.org/
Selenoid
Selenoid — это программа, которая позволяет управлять браузерами и Android-эмуляторами с помощью специальных драйверов. Умеет запускать каждый из них изолированно в Docker-контейнере.
Selenoid представляет собой альтернативное решение Selenium Server, хотя суть та же — организация работы драйверов.
Основная идея Selenoid состоит в том, чтобы запускать новый контейнер для каждой сессии (запуска нового браузера или эмулятора) и останавливать его сразу же после закрытия сессии.
Selenoid позволяет поддерживать высокую нагрузку без дополнительных ресурсозатрат.
Более подробно можно почитать здесь: https://aerokube.com/selenoid/latest/
Selendroid
Selendroid — это фреймворк для автоматизированного тестирования мобильных приложений на базе Android.
Используется на ранних версиях Android — до 17 level api (android 4.2). Но не выше.
Коротко — это уже не очень актуальные фреймворк для работы с Android-приложениями.
Более подробно можно почитать здесь: http://selendroid.io
Итого
Инструментов много, каждый предназначен для своих задач. Постарался коротко и без воды рассказать про группу Selen-проектов. 🙂
Если такой формат будет интересен, далее сделаю обзор на инструменты для мобильной автоматизации.
Спасибо за внимание
В рамках курса мы поговорим о том, как с нуля написать универсальные тесты для Android и iOS, как запускать их в CI Jenkins и под конец захватим довольно объемную тему автоматизации мобильного веба.
Обсудить в форуме
Облачные автотесты Selenium + Ubuntu (пошаговая инструкция) / Хабр
В данной публикации я расскажу о том, как подружить Linux (ubuntu server 14.04) с Selenium Server v.2.43.1, о подводных камнях и зачем мне в облаке понадобился сервер для автоматических тестов.
Не так давно на Хабре была опубликована статья «Автотесты – барское дело». Я считаю, что в команде, где более 2-х разработчиков работают над одним проектом — это просто необоходимая вещь. Когда я работал один, обходился без тестов. Проект писался с нуля, код я знал как свои 5 пальцев. Компания росла очень быстро — в месте с ней и количество задач. Появились новые разработчики, тут то и начались проблемы. Пишем один функционал — отваливается другой. Не подумайте, такое случалось редко, но такие ошибки стоили дорого и нужно было с этим бороться. В это время я принял решение ввести автотесты в процесс разработки, о чем ни капли не жалею.
Сейчас я решил еще больше оптимизировать процесс тестирования. Идея в том, чтобы автоматически запускать тесты при поднятии функционала на дев, продакшин. Преимущества такого подхода очевидны и о них уже писали не раз. Как минимум — это моя уверенность в том, что тесты отработали и при заливке на продакшин ничего не сломается.
Решение задачи:
Я выбрал облако (DigitalOcean), в котором можно легко расширять/клонировать VPS. Тесты запускаю в 2 потока. Для этих целей выбрал сервер — с 2гб ОЗУ, 2 ядра по 2.40GHz. Оперативной должно быть с запасом, иначе тесты будут падать из-за ее нехватки, поэтому подключил еще Swap на 1гиг.
В качестве ОС выбрал Ubuntu 14.04 (в DO сборка Ubuntu 14.04 LAMP).
LAMP нужен для панели управления, вы можете отдельно поставить php. Для запуска тестов нужен браузер (мы тестируем в Firefox), Xvfb для запуска браузера в фоновом режиме, GUI + сервер XRDP для того, чтобы удаленно подключаться к рабочему столу, Exim для отправки результатов на почту, Java + Selenium + PhpUnit + php curl — для работы тестов.
Апгрейдим систему и устанавливаем FF:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install firefox
Подключаем по надобности SWAP:
sudo dd if=/dev/zero of=/home/swap-tmp bs=1024 count=1024K
sudo mkswap /home/swap-tmp
sudo swapon /home/swap-tmp
echo "/home/swap-tmp swap swap defaults 0 0" | sudo tee -a /etc/fstab
в примере дополнили ОЗУ на 1гб.
Ставим xvfb – оболочку для запуска FF в фоновом режиме и шрифты:
sudo apt-get install xvfb
sudo apt-get install -y xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic xvfb x11-apps
По надобности ставим XFCE + Xrdp сервер для удаленного подключения и тестирования в визуальной среде:
apt-get -y install xubuntu-desktop
apt-get -y install xrdp
в /etc/xrdp/startwm.sh удаляем то, что было — пишем следующее:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
#. /etc/X11/Xsession
startxfce4
Перезагружаем xrdp:
service xrdp restart
Теперь можно приконектится к серверу через удаленный рабочий стол.
Устанавливаем PHP + Curl:
sudo apt-get install php5
sudo apt-get install php5-curl
Ставим phpunit:
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit
Устанавливаем JAVA для запуска Selenium:
apt-get install default-jdk
Качаем последнюю версию selenium server. На момент написания статьи последняя 2.43:
mkdir /var/selenium/
wget http://selenium-release.storage.googleapis.com/2.43/selenium-server-standalone-2.43.1.jar
mv selenium-server-standalone-2.43.1.jar /var/selenium/server.jar
Для отправки уведомлений ставим exim4:
sudo apt-get install exim4 exim4-config
dpkg-reconfigure exim4-config
Мне для этих целей достаточно SMTP через «Яндекс.Почту». В интернете есть множество инструкций по настройке, поэтому заострять на этом внимание не буду.
Что бы selenium работал правильно и мог запустить Firefox в фоновом режиме — выполняем комманды:
Xvnc :10 -geometry 1920x1080 -depth 24 -bs -ac -nolisten tcp > /dev/null &
export DISPLAY=:10
После этого можно запускать Selenium:
java -jar /var/selenium/server.jar
Тут-то и появилась первая проблема. Selenium зависает на строке:
04:04:29.264 INFO - Started HttpContext[/,/]
Через раз его попускало и он запускался спустя, примерно, 15 минут.
При запуске через дебаг:
java -jar /var/selenium/server.jar --debug
09:24:21.360 DEBUG [1] org.openqa.jetty.http.HttpContext - Init classloader from null, sun.misc.Launcher$AppClassLoader@356e3aaf for HttpContext[/wd,/wd]
09:24:21.361 DEBUG [1] org.openqa.jetty.util.Container - Starting org.openqa.jetty.jetty.servlet.ServletHandler@6c10fa4d
09:24:21.361 DEBUG [1] org.openqa.jetty.jetty.servlet.AbstractSessionManager - New random session seed
Видно, что тупит он на создании сессии. Как оказалось, проблема не у меня одного и решается она путем правки файла /etc/java-7-openjdk/security/java.security. Нужо заменить строку:
securerandom.source=file:/dev/urandom
На:
-Djava.security.egd=file:/dev/urandom
Сохранил, запустил заново — все ок.
Ставим Selenium на автозапуск. В /etc/rc.local дописываем (в конце файла, или перед die, если есть):
Xvnc :10 -geometry 1920x1080 -depth 24 -bs -ac -nolisten tcp > /dev/null &
export DISPLAY=:10
sleep 2s
java -jar /var/www/sao/demon/selenium/selenium-server-standalone-2.39.0.jar > /dev/null &
Теперь при запуске сервера — selenium будет стартовать автоматически.
Практически все готово. Осталось в самих тестах настроить отправку уведомлений на почту с результатами и создание скриншотов в случае падения. Для автоматического запуска тестов можно написать простенький скрипт на сокетах, который слушает порт и, получив комманду, запускает нужные тесты. Для того, чтобы тесты стартовали автоматически при заливке на дев/продакшин — делаем скрипт обертку, либо юзаем callback возможности системы контроля версий, с которой работаете.
P.S Для тех, кто использует тесты на базе Yii 1.1. Они не работают с новой версией phpunit. Я решил не переходить на старые версии.
Проблему решил следующим образом:
В bootstrap.php заменил yiit.php на yiilite.php, Yii::createWebApplication на Yii::createConsoleApplication.
В файле WebTestCase.php заменил extends CWebTestCase на extends PHPUnit_Extensions_SeleniumTestCase
и перенес с CWebTestCase весь функционал.
запуск на удаленной машине — Блог вебразработчика
Свежие записи
Donec in mi a arcu cursus Commodo non ut metus. Nunc id eros ut augue consquat tempus ut non ligula. Vestibulum ante ipsum primis в faucibus orci luctus et ultrices posuere cubilia Curae; Целое число pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna.Nullam elementum, Tortor Vitae Pulvinar Mattis, Orci Neque Porta Tortor, A Feugiat Nisi Lacus Quis Diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend в auctor enim cursus. Nullam fermentum pretium risus, в hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut toror velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate.Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing.
Proin mattis faucibus facilisis. Целое число не lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Класс aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui.Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada conquat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus Commodo non ut metus.Nunc id eros ut augue consquat tempus ut non ligula. Vestibulum ante ipsum primis в faucibus orci luctus et ultrices posuere cubilia Curae; Целое число pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, Tortor Vitae Pulvinar Mattis, Orci Neque Porta Tortor, A Feugiat Nisi Lacus Quis Diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque.Fusce hendrerit dolor nec odio eleifend в auctor enim cursus. Nullam fermentum pretium risus, в hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut toror velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing.
Proin mattis faucibus facilisis. Целое число не lacus ac ligula accumsan convallis quis molestie erat.Curabitur imperdiet vestibulum vulputate. Класс aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada conquat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis.Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus Commodo non ut metus. Nunc id eros ut augue consquat tempus ut non ligula. Vestibulum ante ipsum primis в faucibus orci luctus et ultrices posuere cubilia Curae; Целое число pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna.Nullam elementum, Tortor Vitae Pulvinar Mattis, Orci Neque Porta Tortor, A Feugiat Nisi Lacus Quis Diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque. Fusce hendrerit dolor nec odio eleifend в auctor enim cursus. Nullam fermentum pretium risus, в hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut toror velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate.Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing.
Proin mattis faucibus facilisis. Целое число не lacus ac ligula accumsan convallis quis molestie erat. Curabitur imperdiet vestibulum vulputate. Класс aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui.Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada conquat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis. Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
Donec in mi a arcu cursus Commodo non ut metus.Nunc id eros ut augue consquat tempus ut non ligula. Vestibulum ante ipsum primis в faucibus orci luctus et ultrices posuere cubilia Curae; Целое число pretium, erat sit amet scelerisque euismod, purus lectus convallis dui, eget imperdiet sapien est ut magna. Nullam elementum, Tortor Vitae Pulvinar Mattis, Orci Neque Porta Tortor, A Feugiat Nisi Lacus Quis Diam. Ut gravida augue id est rutrum elementum. Mauris eget felis dolor. Phasellus ante ante, porttitor sit amet lobortis ut, suscipit id neque.Fusce hendrerit dolor nec odio eleifend в auctor enim cursus. Nullam fermentum pretium risus, в hendrerit nulla cursus sit amet. Fusce eu tempus elit. Ut toror velit, aliquam in ornare vel, feugiat sed nibh. Donec fringilla est id odio lacinia vulputate. Donec nulla urna, congue sit amet pretium non, dictum at orci. Fusce neque sem, fermentum eu tempus nec, mattis venenatis sem. Proin scelerisque velit tristique urna mattis adipiscing.
Proin mattis faucibus facilisis. Целое число не lacus ac ligula accumsan convallis quis molestie erat.Curabitur imperdiet vestibulum vulputate. Класс aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Mauris lacus ligula, hendrerit eget suscipit in, sollicitudin nec dui. Suspendisse euismod, lorem pretium gravida rhoncus, enim quam facilisis orci, nec volutpat nisi dolor id lacus. Proin dolor arcu, rutrum eget hendrerit vel, pharetra id elit. Nullam porta euismod suscipit. Pellentesque malesuada conquat sem, et auctor magna aliquam gravida. Nullam blandit dignissim iaculis.Suspendisse non diam nec augue scelerisque iaculis. Nam id dui sed lorem vulputate rhoncus eget eu tellus. In sit amet nisi nunc. Fusce sed aliquet sem. Aliquam sit amet metus metus.
.
Использование Selenium для работы с внешними ресурсами сервера
.
Прочитав заглавие статьи, Вы, наверняка, зададитесь вопросом «А зачем это нужно?» с последующими утверждениями, «это же совсем не целевое использование такого замечательного средства для тестирования как сервер Selenium». Всему свое время и, в этой небольшой статье я попытаюсь ответить на ваши вопросы.
Начнем с того, что кратко расскажем, что же такое Selenium и для чего он нужен.Главным образом Selenium — это инструмент для автоматизированного тестирования Web-приложений, как проект был начат в июне 2004 года и на текущий момент включает несколько инструментов. В совокупности набор инструментов Selenium предоставляет богатый набор возможностей для тестирования Web-приложений различных типов. Ключевые особенности Selenium является возможностью запуска в различных браузерах и использовании страниц нескольких селекторов для идентификации элементов (например, XPath или CSS селекторов).
Набор инструментов Selenium
Selenium включает несколько инструментов с разным назначением:
Selenium 2 (или Selenium Webdriver)
Новое направление развития проекта Selenium: результат слияния двух проектов WebDriver и Selenium1. Каждый из этих продуктов обладал своими достоинствами.
Selenium 1 (или дистанционное управление Selenium)
На протяжении длительного времени Selenium RC был основным направлением развития проекта, пока в результате слияния WebDriver и Selenium не появился Selenium 2, более новый и мощный инструмент, однако Selenium 1 все еще активно поддерживается.
Selenium IDE
Представляет собой инструмент для разработки и создания прототипов тестовых сценариев.Это плагин для Firefox, с использованием прогнозируемых сообщений для создания автоматизированных тестов.
Селеновая сетка
Selenium Grid позволяет масштабировать большие тестовые наборы, а также запускать тесты, которые необходимо выполнить в нескольких окружениях. Selenium Grid позволяет запускать тесты параллельно, разные тесты могут быть запущены в одно и то же время на нескольких удаленных машинах.
Использование Selenium не в целях тестирования в реальном проекте
В качестве примера рассмотрим реальный проект по реализации одной крупной Web-системы, которая должна взаимодействовать с большим количеством внешних ресурсов.О внутренней структуре и организации сторонних ресурсов мы ничего не знаем, хотя мы можем спокойно создать в них новый аккаунт или использовать уже существующий с помощью предоставляемого веб-интерфейса. Реализуемая система, кроме этого представляла собой «агрегатор аккаунтов» сторонних ресурсов и способна выполнять ряд операций над ними. По большей степени набор операций одинаков для всех сторонних ресурсов. Операции выполнялись с использованием предоставляемого ресурса API, но при добавлении очередного ресурса в системе разработчики столкнулись с проблемой ограниченности и недостаточности API, кроме некоторых ресурсов не предоставляемых ровным счетом API, а включить их в создаваемую систему было просто необходимо.
Таким образом, одни ресурсы предоставляли довольно хорошие API, с полным набором необходимых методов, другие же либо скудное API с ограниченными возможностями, либо не имели его вообще. Кроме этого, предоставляемые ресурсы API часто используют специальные специфические библиотеки, включающие в проект значительно увеличенный размер, поэтому о каком-то стандартном методе использования API речи и не шло.Единственный вариант общей реализации в этом случае заключался в имплементации набора адаптеров для каждого нового ресурса.
Поэтому возникла идея использования «Селен-подход». Действительно, мы ведь можем сымитировать действия пользователя на стороннем ресурсе. Запустить реальный браузер, забить значения в поля, сделать соответствующую цепочку переходов и выйти из аккаунта.
Конечно, вы скажете, что можно анализировать и разбирать запросы. Зачем поднимать сервер для этого? Это же медленно! Гораздо проще проанализировать пары каждого запроса в цепочке переходов и реализовать их с помощью какой-нибудь библиотеки на основе CURL на сервере.Использование простых методов защиты, запускаемых через систему вычислений, выводит: во-первых, разработка в этом случае затягивается, используя простые методы защиты, например:
.
- Наличие различных проверочных хеш-значений в запросах
- Файлы cookie на основе JS
- Последовательность пересылок при переходе
- Большое количество ajax-запросов
- Проверка специфических заголовков запроса
Во-вторых, внешние ресурсы часто что-то меняют, и оперативно внести изменения в реализуемую систему гораздо быстрее в случае «Selenium» -подхода, чем в «переанализе» request / response-пар.
Итак, подытожим причины:
- Ограниченность или отсутствие API;
- Существенное различие интерфейсов API и требование дополнительных библиотек;
- Сложность анализа и разбора отсылаемых запросов и получаемых ответов;
- Механизмы защиты внешних ресурсов и специфика их внутренней реализации;
- Быстрота внесения изменений и разработки в целом;
Но что же со временем и стабильностью исполнения, скажете вы? Единственное действительно уязвимое место данного подхода.Использование данного подхода имеет смысл для работы, не критичных операций времени исполнения, возможно, массовые действия с использованием очереди. Время исполнения той или иной операции с использованием Selenium-подхода всегда можно оптимизировать, как это было сделано и в реализуемой системе. Что касается стабильности, то ее тоже довольно легко можно вывести на приемлемый уровень реализации компонентного компонента, направленного на увеличение стабильности работы с Selenium-сервером, занимающимся мониторингом процессов.Кроме того, в сети можно найти большое количество статей о том, как ускорить работу Selenium-сервера.
Установка и настройка Selenium-сервера
Рассмотрим пример CentOS, последовательность шагов по установке и настройке Selenium-сервера, с последующим его использованием в PHP:
.
- Устанавливаем Ява:
yum install java;
- Скачиваем виртуальный буфер для эмуляции иксов:
yum install Xvfb;
- Пишем скрипт демонизации для xvfb (прилагаться не будет):
/ etc / init.d / xvfb
- Меняем параметры и запускаем:
chmod + x /etc/init.d/xvfb chkconfig xvfb на служба xvfb start
Качаем Selenium (версия может отличаться на момент развертывания сервера):
cd / usr / local / lib / selenium wget http://selenium.googlecode.com/files/selenium-server-standalone-2.20.0.jar mkdir -p / var / журнал / селен / chmod a + w / var / log / selenium /
Пишим скрипт загрузки (прилагаться не будет):
/ etc / init.d / селен
Не забудьте необходимые для полноценного использования Selenium-сервера:
PARAMS = "- disable-web-security -ignore-certificate-errors -interactive -multiWindow -trustAllSSLCertificates"
Запускаем Selenium:
chmod + x /etc/init.d/selenium chkconfig селен на сервис selenium start
Ставим браузер (рекомендации: лучше google chrome, не забудьте добавить репу / etc / yum.repos.d / google.repo):
yum install google-chrome-stable
Возможно вам придется добавить WebDriver для Google Chrome:
PARAMS = "- disable-web-security -ignore-certificate-errors -interactive -multiWindow -trustAllSSLCertificates - Dwebdriver.chrome.driver = / var /… .. / chromedriver "
Ставим PHP Единица:
yum установить php-pear груша установить phpunit / PHPUnit_Selenium
Добавьте каналы:
груша канал-открытие груша.phpunit.de груша канал-откройте для себя грушу.symfony-project.com груша channel-discover components.ez.no
Добавляем возможность работы с Selenium-сервером из PHP:
груша установка -a Testing_Selenium-0.4.4
Итог
Использование Selenium сервера для работы пользователя не в целях тестирования смыл в проектах, не критичных ко времени исполнения. Очевидные плюсы заключаются в простоте разработки и внесении изменений — не нужно анализировать каждый запрос.Отличное «расширение» существующего API до необходимого уровня 😉
.
Селен, Селеноид, Селенид, Селендроид… Что все это значит?
Автор: Виталий Котов
В мире новичку ориентироваться довольно сложно. Приходится узнавать множество понятий, разбираться в особенностях реализации инструментов. Например, вот: Selenium, Selenide, Selenoid, Selendriod — что это, чем отличается? Да и можно ли их сравнивать?
Написал статью, чтобы помочь в этом разобраться. Кому интересно, добро пожаловать под кат!
Selenium
Selenium — это инструмент для автоматизированного управления браузерами.
В проекта Selenium открывается серия программных продуктов с открытым исходным кодом:
- Selenium Server,
- Селеновая сетка,
- Selenium IDE и т.д.
Selenium Server — это программа, которая позволяет управлять браузерами с помощью специальных драйверов. Она должна находиться на том же компьютере, что и браузер, которому нам предстоит работать.
После установки Selenium Server к нему можно работать с другим компьютером для удаленного управления браузерами по специальному протоколу, который написан поверх HTTP.
Коротко — Selenium Server помогает управлять браузерами на определенной машине.
Более подробно можно почитать здесь: https://www.seleniumhq.org/
Selenium Grid устанавливается на одном компьютере и может работать удаленно с использованием других, на которых Selenium Server.
Он создан для того, чтобы запустить тесты на большом количестве машин, обращаясь только к одной, на которой установлен Selenium Grid.
Для создания сессии (т.е. запускать) мы всегда будем приходить на компьютер, где стоит Selenium Grid. Он уже сам решит, какая машина менее нагружена для этого и туда и перенаправит команду.
Все машины, которые работают под управлением Selenium Grid, могут работать под разными операционными системами, на них могут быть установлены разные браузеры.
Коротко — Selenium Grid нужен для организации работы с размещенными машинами, где установлен Selenium Server.
Более подробно можно почитать здесь: https: // www.seleniumhq.org/docs/07_selenium_grid.jsp
Selenium IDE — это плагин к браузеру Firefox, с помощью которого можно записывать и воспроизводить действия пользователя.
Он не имеет особого отношения ни к Selenium Server, ни к Selenium Grid и позволяет работать только с локальным браузером.
Более подробно можно почитать здесь: https://www.seleniumhq.org/selenium-ide/
Selenide
Selenide — это один из фреймворков для автоматизированного тестирования веб-приложений.С его помощью можно быстро и относительно просто писать код, который будет формировать и отправлять HTTP-команды на Selenium Server или Selenium Grid.
Он заточен под то, чтобы писать такие сценарии, которые будут проверять работу веб-приложения: поиск нужных элементов, проверка событий, взаимодействие с UI и так далее.
Несмотря на схожесть названия с линейкой программ Selenium, сам Selenide.
Коротко — с Selenide проще писать код, который заточен именно под тестирование веб-приложения.
Более подробно можно почитать здесь: https://ru.selenide.org/
Selenoid
Selenoid — это программа, которая позволяет управлять браузерами и Android-эмуляторами с помощью специальных драйверов. Умеет запускать каждый из них изолированно в Docker-контейнере.
Selenoid представляет собой альтернативное решение Selenium Server, хотя суть та же — организация работы драйверов.
Основная идея Selenoid состоит в том, чтобы запустить новый контейнер для каждой сессии (запуска нового или эмулятора) и останавливать его сразу же после закрытия.
Selenoid позволяет поддерживать быстрый нагрузку без дополнительных ресурсозатрат.
Более подробно можно почитать здесь: https://aerokube.com/selenoid/latest/
Selendroid
Selendroid — это фреймворк для автоматизированного тестирования мобильных приложений на базе Android.
Используется на ранней версиих Android — до 17 уровня api (android 4.2). Но не выше.
Коротко — это уже не очень актуальные фреймворк для работы с Android-приложениями.
Более подробно можно почитать здесь: http://selendroid.io
Итого
Инструментов много, каждый предназначенный для своих задач. Постарался коротко и без воды рассказать про группу Selen-проектов. 🙂
Если такой формат будет интересен, сделаю обзор на инструменты для мобильной системы.
Спасибо за внимание
В рамках курса мы поговорим о том, как с нуля написать универсальные тесты для Android и iOS, как запустить их в CI Jenkins и под конец захватим довольно объемную тему автоматизированного мобильного веба.
Обсудить в форуме
.
Облачные автотесты Selenium + Ubuntu (пошаговая инструкция) / Хабр
В данной публикации я расскажу о том, как подружить Linux (сервер Ubuntu 14.04) с Selenium Server v.2.43.1 , о подводных камнях и зачем мне в облаке понадобился сервер для автоматических тестов.
Не так давно на Хабре была опубликована статья «Автотесты — барское дело». Я считаю, что в команде, где более 2-х разработчиков работают над одним проектом — это просто необоходимая вещь. Когда я работал один, обходился без тестов.Проект писался с нуля, код я знал как свои 5 пальцев. Компания росла очень быстро — в месте с ней и количество задач. Появились новые разработчики, тут то и начались проблемы. Пишем один функционал — отваливается другой. Не подумайте, такое случалось редко, но такие ошибки стоили дорого и нужно было с этим бороться. В это время я принял решение автотесты в процессе разработки, чем ни капли не жалею.
Сейчас я решил еще лучше оптимизировать процесс тестирования. Идея в том, чтобы автоматически запустить тесты при поднятии функционала на дев, продакшин.Преимущества такого подхода очевидны и о них уже писали не раз. Как минимум — это моя уверенность в том, что тесты отработали и при заливке на продакшин ничего не сломается.
Решение задачи :
Я выбрал облако (DigitalOcean), в котором можно легко расширять / клонировать VPS. Тесты запускаю в 2 потока. Для этих целей выбрал сервер — с 2гб ОЗУ, 2 ядра по 2,40 ГГц. , поэтому подключил еще Swap на 1гиг.
В качестве ОС выбрал Ubuntu 14.04 (в DO сборка Ubuntu 14.04 LAMP).
ЛАМПА нужен для панели управления, вы можете отдельно поставить php. Для запуска тестов нужен браузер (мы тестируем в Firefox), Xvfb для запуска в фоновом режиме, GUI + сервер XRDP для того, чтобы удаленно подключиться к рабочему столу, Exim для отправки результатов на почту, Java + Selenium + PhpUnit + php curl — для работы тестов.
Апгрейдим систему и установить FF:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get установить firefox
Подключаем по надобности SWAP:
sudo dd if = / dev / zero of = / home / swap-tmp bs = 1024 count = 1024K
Судо mkswap / главная / своп-tmp
sudo swapon / главная / своп-tmp
echo "/ home / swap-tmp swap swap defaults 0 0" | sudo tee -a / etc / fstab
в примере дополнили ОЗУ на 1гб.
Ставим xvfb — оболочку для запуска FF в фоновом режиме и шрифты:
sudo apt-get install xvfb
sudo apt-get install -y xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic xvfb x11-apps
По надобности ставим XFCE + Xrdp сервер для удаленного подключения и тестирования в визуальной среде:
apt-get -y install xubuntu-desktop
apt-get -y установить xrdp
в / etc / xrdp / startwm.sh удаляем то, что было — пишем следующее:
#! / bin / sh
если [-r / etc / default / locale]; тогда
. / и т. д. / по умолчанию / локаль
экспорт LANG LANGUAGE
фи
#. / etc / X11 / Xsession
startxfce4
Перезагружаем xrdp:
service xrdp restart
Теперь можно приконектится к серверу через удаленный рабочий стол.
Устанавливаем PHP + Curl :
sudo apt-get install php5
sudo apt-get установить php5-curl
Ставим phpunit :
wget https: // phar.phpunit.de/phpunit.phar
chmod + x phpunit.phar
mv phpunit.phar / usr / local / bin / phpunit
Устанавливаем JAVA для запуска Selenium:
apt-get install default-jdk
Качаем версию последней selenium server . На момент написания статьи последняя 2.43 :
mkdir / var / selenium /
wget http://selenium-release.storage.googleapis.com/2.43/selenium-server-standalone-2.43.1.jar
mv selenium-server-standalone-2.43.1.jar /var/selenium/server.jar
Для отправки уведомлений ставим exim4 :
sudo apt-get install exim4 exim4-config
dpkg-reconfigure exim4-config
Мне для этих целей достаточно SMTP через «Яндекс.Почту». В интернете есть множество инструкций по настройке, поэтому заострять на этом внимание не буду.
Что бы selenium работал правильно и мог запустить Firefox в фоновом режиме — выполняем комманды :
Xvnc: 10 -geometry 1920x1080 -depth 24 -bs -ac -nolisten tcp> / dev / null &
экспорт DISPLAY =: 10
После этого можно запустить Selenium :
java -jar / var / selenium / server.банка
Тут-то и появилась первая проблема. Селен зависает в строке:
04: 04: 29.264 INFO - Запущен HttpContext [/, /]
Через раз его попускало и он запускался спустя, примерно, 15 минут.
При запуске через дебаг:
java -jar /var/selenium/server.jar --debug
09: 24: 21.360 DEBUG [1] org.openqa.jetty.http.HttpContext - Инициализирует загрузчик классов из нуля, sun.misc.Launcher$AppClassLoader@356e3aaf для HttpContext [/ wd, / wd]
09: 24: 21.361 DEBUG [1] org.openqa.jetty.util.Container - Запуск org.openqa.jetty.jetty.servlet.ServletHandler@6c10fa4d
09: 24: 21.361 DEBUG [1] org.openqa.jetty.jetty.servlet.AbstractSessionManager - Новое случайное начальное число сеанса
Видно, что тупит он на создании сессии. Как оказалось, проблема не у меня одного и решается путем правки файла /etc/java-7-openjdk/security/java.security . Нужо заменить строку:
securerandom.source = file: / dev / urandom
На:
-Djava.security.egd = файл: / dev / urandom
Сохранил, запустил заново — все ок.
Ставим Selenium на автозапуск . В /etc/rc.local дописываем (в конце файла, или перед die, если есть):
Xvnc: 10 -geometry 1920x1080 -depth 24 -bs -ac -nolisten tcp> / dev / null &
экспорт DISPLAY =: 10
спать 2 секунды
java -jar /var/www/sao/demon/selenium/selenium-server-standalone-2.39.0.jar> / dev / null &
Теперь при запуске сервера — селен будет стартовать автоматически.
Практически все готово. Осталось в собственном тестах настроить отправку сообщений на почту с результатами и создание скриншотов в случае падения. Для автоматического запуска тестов можно написать простенький скрипт на сокетах, который слушает порт и, получив комманду, запускает нужные тесты. Для того, чтобы тесты стартовали автоматически при заливке на дев / продакшин — делаем скрипт обертку, либо юзаем обратный вызов возможностей системы контроля версий, с которой работаете.
P.S Для тех, кто использует тесты на базе Yii 1.1 . Они не работают с новой версией phpunit. Я решил не переходить на старую версию.
Проблему решил следующим образом:
В bootstrap.php заменил yiit.php на yiilite.php , Yii :: createWebApplication на Yii :: createConsoleApplication .
В файле WebTestCase.php заменил расширяет CWebTestCase на расширяет PHPUnit_Extensions_SeleniumTestCase
и перенес с CWebTestCase весь функционал.
.