Больше четырёх лет назад мы озаботились созданием удобной системы для автоматического выполнения Selenium-тестов наших продуктов на разных браузерах. Тогда ещё никто не слышал о Sauce Labs, и все придумывали что-то своё. Мы тоже придумали — сделали свою систему, которая умеет самостоятельно запускать тесты Selenium на выбранных браузерах и ОС по расписанию. Ну, и хранит результаты выполнения, конечно.
В какой-то момент мы решили, что система может пригодиться не только нам, и решили сделать сервис, доступный всем.
Не так давно этот сервис — Nerrvana — открылся для всех желающих.
Что умеет делать сервис
Для каждого выполнения тестов создаётся нужное количество Selenium RC/node в облаке, которые объединены в Selenium Grid'ы. В некотором роде сервис похож на Sauce Labs, но имеет ключевое отличие: он не просто предоставляет Selenium-ноды, а и сам выполняет пользовательские тесты на них. При этом, чтобы запустить тесты на разных браузерах, в коде тестов ничего менять не надо — надо лишь проставить галочки в веб-интерфейсе.
Работа с сервисом выглядит так: у вас есть тесты Selenium, которые вы по FTP загружаете в Nerrvana. Через web-интерфейс (или через API) вы выбираете (ставите галочки), на каких браузерах тесты должны выполняться, и выбираете, будет ли это разовый запуск или тесты надо будет запускать по расписанию.
Если ваши тесты умеют работать в несколько потоков — вы можете указать, сколько Selenium nodes вы хотите использовать для каждого из браузеров.
На этом ваша работа заканчивается, дальше всё делает Nerrvana.
Она будет запускать ваши тесты на выбранных браузерах по заданному расписанию, сохраняя результаты каждого выполнения, чтобы вы их могли позже просмотреть. Тесты будут работать одновременно для выбранных браузеров (но, конечно, независимо друг от друга).
При желании вы легко можете позволить своим тестам сообщать Nerrvana об ошибках — тогда Nerrvana сможет уведомлять вас, например, по почте.
Также можно воспользоваться плагином для Jenkins, который сможет обновлять тесты и выполнять их в Nerrvana для каждого нового билда. Ещё можно добавить в Selenium IDE Nerrvana formatter, который будет создавать тесты, оптимизированные для работы с Nerrvana (подробнее).
Как это работает на практике
Как всё это происходит, вы можете посмотреть сами, если у вас есть минут пять свободного времени.
(по клику — картинки в полном разрешении)
- Попадаете в Неррвану (нужен email, на него придут детали аккаунта).
- Жмёте Add new test run
- Заполняете поле «Test run name», ставите галочку напротив нужной платформы (временно можно выбрать только две платформы за раз, или два Node на платформу — мера против хабраэффекта)
- Выбираете в качестве исполняемого файла habratest/rebuildAndRun.sh. Я написал элементарный тест для Selenium1*, который открывает Хабр и чего-то на нём делает, а потом показывает в Nerrana результаты.
- Выбираете «Option 1», «Run» (в option 2, т.е. запуске по расписанию, возможность задать периодичность отключена из-за хабраэффекта тоже).
- Жмёте «Go ahead», и на Dashboard наблюдаете, как тест выполняется.
- Можно перейти на страницу с результатами выполнения и посмотреть, что тест пожелал сообщить Nerrvana. Можно нажать на глазик (потребуются логин и пароль, пришедшие на почту) и посмотреть, какой отчёт он создал. Отчёт лежит в _files_out/habratest/logs/html/habraReport.html, для его создания используется наш небольшой фреймворк.
О самих отчётах можно подробнее почитать тут (пример, пример), и, если хотите, вы можете использовать его для своих тестов.
В конце концов, вы можете посмотреть на код самого теста.
Вот какие скриншоты сделали тесты для разных браузеров: FF, Chrome, Safari, IE10.
Если захотите ещё поиграть — можете по FTP изменить код теста или положить другой тест. В тестах вы можете использовать как Selenium1, так и WD — в папке simple_test_java вы найдёте примеры.
Что будет дальше
На самом деле, мы не совсем представляем, куда нам двигаться дальше, и как использовать наши отличия от Sauce Labs. Для наших целей Nerrvana хватает за глаза, но, возможно, вы сумеете сказать, чем бы сервис мог быть полезен вам, стоит ли его развивать и как? Несколько наших мыслей по этому поводу:
- Nerrvana поддерживает выполнение тестов на Java, PHP, Ruby, Python, Perl, в том числе может работать с тестами, которые используют фреймворки типа Сucumber, Robot Framework, Thucydides и других (мы планируем написать о том, как использовать эти фреймворки в Nerrvana).
- Тесты находятся на Nerrvana, т.е. вы можете запустить их из любого места, или это может сделать ваш клиент.
- Так как тесты запускаются на Nerrvana по расписанию, с её помощью можно мониторить какие-то ключевые функции ваших сайтов.
- Серверы Nerrvana можно разнести по всему миру и давать возможность выбирать, откуда запускать тесты.
- Тесты работают быстрее, чем тесты через Sauce Labs, поскольку нет задержек при общении теста с Selenium node.
- Nerrvana instance можно развернуть внутри корпоративной сети, если правила безопасности или другие причины не позволяют запускать тесты снаружи
- Недостаток того, что тесты выполняются у нас — набор софта ограничен тем, что предустановлен нами (если это не jar библиотеки, конечно). Мы рассматриваем вариант использования Chef, чтобы можно было запускать нужную самим тестам конфигурацию — версию ОС, версию Java/PHP, самого Selenium и т.п. Такая конфигурируемая машина будет запускаться дольше, но будет гибче.
- Если реализовать предыдущий пункт, Nerrvana может стать CI сервером в облаке (типа TravisCI), способным выполнять не только Unit, но и Selenium-тесты.
В общем, сделать можно много, но пока не совсем понятно, что действительно будет интересно и востребовано.
Заранее прошу извинить, если таки случится хабраэффект и он вызовет какие-то проблемы у сервиса. Кроме нас, сейчас реальных пользователей почти нет, и потому мы используем всего один физический сервер. Если потребуется, в будущем мы добавим серверов.
Мы будем рады, если Nerrvana окажется полезной для кого-то из вас.
А я буду рад выслушать замечания и ответить на вопросы. Возможно, какие-то ответы уже есть здесь.
______
* Selenium1 в тесте использовал, чтобы заодно показать наш фреймворк для отчётов, мы его пока не успели переписать под WD. Обнаружил, что мой тест на Selenium1 почему-то плохо работает в Опере. На WD в Опере то же самое работает ок — если будете пробовать, имейте в виду. Да и вообще, по моим наблюдениям, WD уже работает стабильнее первого Selenium. Пример теста на WD лежит в simple_test_java.
Автор: BearOff
Как конкретно происходит регистрация на nerrvana ?
Я отправил запрос на регистрацию с указаным своим email, но вот уже третий день на него ничего не приходит. Как долго мне ждать подтверждения регистрации?