Добрый день, друзья. Сегодня мы поговорим о сложной теме автотестирования и о таком крутом продукте как Selenoid. В этой статьей будет все — боль, страдания, радость, счастье, неудачи и подъемы. В целом это будет статья о Selenoid-е, но обернута она будет красивой предысторией с автотестированием. Давайте начнем.
Многопоточное тестирование в корпоративных масштабах
Как правило в больших IT-компаниях, имеющих ряд своих продуктов, имеется набор инструментариев по тестированию и разработки этих продуктов. Сидят томные головы тестировщиков, ежедневно покрывающих каждый миллиметр приложений тестами. Сидят умные виды разработчиков, конвертирующие баги в фичи.
Ну так вот.
В совокупности напряженной работы всех этих работ, появляется много продуктов, соответственно много тестов. Прежде, чем отдавать какой-либо продукт в пром, его нужно мильен раз протестировать, и 2 мильена раз отладить. Естественно ручное тестирование постепенно уходит все дальше и дальше, и существующий тренд автотестирования набирает обороты. Но! Не все так гладко как кажется на первый взгляд. Существуют инструменты TeamCity, которые одной кнопкой могут запустить деплой или ран чего угодно, на каком угодно сервере, если это «что угодно» заранее написано. Существует инструмент Selenium Grid, который грубо говоря создает кластер из серверов, на которых гоняются автотесты и как правило все это дело протекает на виндовых серверах/нодах. И рано или поздно наступает момент, когда тесты начинают отваливаться.
Тестировщики и разработчики бьют тревогу, орут друг на друга, ругаются, бегают кругами и тут под весь этот шум в темном-темном углу, на темном-темном мониторе, devops-ер занимается поднятием всей этой прелести, про себя ругаясь на очередную отвалившуюся машину…
Оптимизация многопоточного тестирования
Ситуация получается такая: Selenium Hub-ы перестают выдерживать нагрузку и заниматься распределением тестов из-за зависания служб, selenium nodes перестают быстро обрабатывать тесты — увеличивается время, веб-приложения начинают медленно грузить веб-страницы из-за замусоренного кэша/временных файлов и т.д. Но решение все-таки есть и называется оно Selenoid. Что это? Это аналог SeleniumGrid, только для Линукса. И использует он контейнеры Docker. Что такое Docker — я говорил в статьях немного ранее.
Selenoid
Все, что показано выше, это яркий пример того, как выполняются 5 параллельных тестов на линуксе. И показано это в ui интерфейсе Селеноида. Когда запускается тест в браузере — запускается отдельный контейнер с чистым браузером, без каких-либо настроек, без борьбы за фокус экрана с параллельными тестами — и все это: многопоточное тестирование. Все отдельно, все быстро, все качественно. Selenoid является великолепной заменой Selenium Grid. Дело в том, что сам селеноид является хабом, и сервер на котором он находится является местом для запуска нод — в свою очередь ноды в рамках селеноида являются контейнерами, которые:
- Запускаются, когда приходит запрос на селеноид.
- Выполняют тесты.
- Контейнер с закончившимися тестами выгружает лог/скриншот в локальную директорию сервера с результатами и удаляется.
3 простых пункта, которые колоссально повышают производительность. Пример из собственной практики:
10 виндовых нод для прогона UI тестов с конфигурациями 4Ггц процессора и 4ГБ оперативной памяти, были заменены одним линуксовым сервером с 16 ядрами и 16 гб оперативной памяти. Здесь математически все просто посчитать.
Итог:
Если у вас падает производительность выполнения тестов на Selenium Grid, то самое время задуматься над переходом на Selenoid.
Плюсы:
- Легкая масштабируемость
- Высокая производительность
- Многопоточность
- Возможность вмешаться в тест из UI части.
- Можно смотреть мультик без опасений «сломать сессию».
- Запись видео и выгрузка его на локальный сервер.
Минусы:
- Логирование — контейнер умирает сразу, после прогона тестов. Тем не менее, можно через сами тесты настроить внешнее логирование (по факту можно все :)).
Далее я более подробно постараюсь рассказать про установку, настройку и кастомизацию Селеноида, и в целом про многопоточное тестирование. Подписывайтесь на нас в ВК, пишите комментарии и не забывайте про YouTube — канал. Спасибо за внимание!