Параллельный запуск нескольких тестов на одной машине

Дело не в нетривиальности, а в нецелесообразности / порой и невозможности распараллеливания тестов на одной машине. Представьте, что у вас в требованиях прописана поддержка 10 различных конфигураций - ОС / браузер.

  1. Как вы собираетесь запускать тесты на других ОС, отличных о вашей?
  2. Как вы собираетесь запускать тесты на IE разных версий?
  3. Выдержит ли ваша машина запуск, к примеру, 10 FF?
  4. Не умрет ли хром драйвер от запуска множества инстансов?
  5. Не возникнут ли проблемы с производительностью? Ввиду того, что тесты пишутся / запускаются на той же машине. Будете закрывать все процессы?
  6. Сумеете ли вы обеспечить чистоту эксперимента на рабочей машине?
  7. Что, если, помимо драйвера, используются тулы, требующие видимости целевого сайта (к примеру, Sikuli)?
  8. Сможете ли однозначно ответить на вопрос, почему тесты падают случайным образом?
  9. Что если регрешен сьют экзекьюшен тайм будет занимать несколько часов? Будете сидеть и ждать, пока они завершатся, забыв о других тасках? Даже в случае ночного экзекьюшена, на утро то ведь все равно придется дебажить и перезапускать все.

Вообще говоря, запуск параллельных UI тестов на одной машине принесет вам больше головной боли, нежели профита.

3 лайка

О чем и речь. Все что вы перчислили и являются возможными сложностями.
Какие то из пунктов не релевантны, а другие могут привести к нецелесообразности.
10 тестов одновременно скажем запускать не надо, но согласитесть что 4 или даже 2 очень даже сократять колличество необходимого времени для выполнения тестов.

Скажем есть 200 различных сценариев которые необходимо прогонять каждую регрессию.
Допустим прогоняются они на одной ОС и не важно на каком браузере.
Почему бы не запускать в одно время несколько таких тестов на одной машине.

1 лайк

Есть успешный опыт.

В проекте используется связка Java + Maven + WebDriver + JBehave.
Последний позволяет пускать тесты в несколько потоков – как локально, так и в Grid.
На друг друга они не влияют. С RemoteWebDriver работает.
http://jbehave.org/reference/stable/multi-threading.html

Сложностей не будет в случае выделения дополнительных ресурсов. Собственно, внедрение автоматизации малыми усилиями является как минимум странным. Мы ведь не в эпоху становления компьютеров живем. И если вы действительно хотите получать хоть какой-то профит от автоматизации, то тут раритетами с 2Гб ОЗУ не обойтись. Можете так и передать своим кастомерам. Тут уже нужно отталкиваться от того, чего вы хотите добиться, зачем нужна автоматизация на вашем проекте…

Я понимаю, что мало кто захочет расставаться с лишними лицензиями на виртуалки, но даже с 2мя тестовыми ВМ на 4Гб ОЗУ вы начнете получать профит. А от одной рабочей тачки (на которой вы еще и девелопите), какой бы она не была крутой, - толку мало. Представьте еще, что завтра вам понадобится поднимать какой-нибудь CI или доп. клиент-серверные тулы… Тоже будете все это разворачивать на своем железе? Много ли у вас останется пространства для маневра?

Потому что вы еще не сталкивались со всеми прелестями работы драйвера при параллельном экзекьюшене на одной машине. Не усложняйте себе жизнь. Лучше приведите хорошие доводы вашим менеджерам, почему вам нужны еще несколько ВМ. Меньше нервов потратите, да и пользы будет больше. Сидеть молча, на все соглашаясь, - равносильно медленному выкапыванию глубокой ямы, из которой один путь - close automation.

1 лайк

Если Вам нужна некая толика уверенности в том, что на это стоит потратить время, то подтверждаю: я потратил и оно работает.
Связка: Robot Framework + Jenkins + pabot.
Тем не менее, как следует из ответов выше, да и из опыта других тестировщиков - Вы можете упереться в совершенно неожиданные трудности.
Так или иначе всякий опыт полезен. Если попробуете, то напишите результаты, пожалуйста.

В контексте данного топика, это ключевой момент.

Самый простой способ увеличить скорость в 2-4 раза (смотря сколько ядер у вас на машине):
Выставить этот флаг в решарпере. Больше чем там разрешено запускать не рекомендуется, так как если потоков больше чем ядер, то выгоды в производительности не будет.

P.S. Только надо быть уверенным в том, что тесты реально независимые и не мешают друг другу.

Так же есть опыт запуска многопоточных тестов на связке Java + Maven + WebDriver + JBehave. Запускается 1 браузер на 1 ядро. Можно и по 1,5 браузера на ядро, но тогда процессор будет загружен на 100%. Плюс используется грид - 5 виртуалок по 4 ядра = 20 браузеров.
Стоит ли тратить на это время - однозначно стоит. В будущем это сэкономит время на ускорении прохождения тестов. У нас тесты проходят в один поток за 50 часов, на гриде - 3,5 часа.

Кстати говоря о Grid. Я его еще фактически не знаю.
При работе с ним хаб тоже запускает тесты или он только перенаправляет на свободный нод?
По дефолту каждый нод гонит один тест?

Грид не параллелит тесты и тем более их не запускает - он играет роль пула доступных браузеров на нодах и транслятора хаб-нод. Число и виды доступных браузеров для каждой ноды можно устанавливать независимо. Запуск и параллелизация тестов лежит на “плечах” тестового фреймворка.

Я имел ввиду что скажем есть у нас 1 сервер запущен как хаб, а так же еще несколько как ноды этого хаба. Так вот, при запуске нескольких тестов через RemoteWebDriver на один и тот же хаб одновременно, хаб распределит их по нодам.
Правильно я понимаю?

Райт. Хаб распределит нагрузку между нодами равномерно. Отдельный сервер на хаб - это перебор, от него нагрузка минимальна.

А сам хаб выполняет тесты или только распределяет?
Если он не запускает то на той машине где сервер запущен как хаб нужно запускать еще один сервер как нод?

Когда вы создаете инстанс RemoteWebDriver, то указываете URL, хаба, который может располагаться где угодно. Ноды же должны быть подняты там, где сами тесты будут выполняться. Нет никакой разницы, будет ли это машина с хабом или какая-то другая. Хаб с нодами общается по http.

Хаб ничего не запускает, вам уже несколько раз повторили. Для запуска тестов используются соответствующие фреймворки по типу TestNG, JUnit, etc. Хаб лишь направляет запросы нужному ноду. Представьте, что это диспетчер.

1 лайк

Хаб[quote=“vmaximv, post:16, topic:4543”]
играет роль пула доступных браузеров на нодах и транслятора хаб-нод.
[/quote]
тчк

Ну так значит, как я написал выше, если я хочу что бы тесты бежали и на той машине на которой бежит хаб сервер, помимо него на той же машине нужно запустить нод сервер и тогда машина, которая с хабом будет так же выполнять функции нода.
Это я к тому что бы хаб сервер был не только распределителем.

Ведь иначе посредством RemoteWebDriver я направляю все тесты на хаб, хаб распределяет их по нодам, но сам не выполняет.

Вы всё верно говорите.

1 лайк

Сконфигурировал параллельный запуск Webdriver тестов через TestNG +
Home · barancev/webdriver-extensions Wiki · GitHub

При запуске открывается нужное количество окон но в какой-то момент в одном из окон выполнение прекращается. Либо 1 тест не проходит в 1 окне, пока идут во 2-ом, потом 2 тест в 1-ом идёт нормального. Пробовал в FF, в Chrome.

Параллелизуются по либо по , thread-count ставлю 2.

В чём может быть причина наводок “двух” окон друг на друга? Куда есть смысл копать?

Можно ли с помощью Selenium Grid запустить несколько браузеров на одной ноде и добиться большей изолированности нескольких инстансов?

P.S. про Grid естественно в курсе, но быстро его заиспользовать не получится, поэтому было желание получить хоть какой-то профит во времени прогона на первых порах.
Спасибо.

1 лайк

Меня интересует данный вопрос. не подскажите ли ресурс или ссылку на гитхаб, с правильной конфигурацией проекта

Такая же проблема C#+NUnit + Selenium Grid - параллельный запуск на одном ноде нескольких браузеров