Есть задача: Написать фреймворк для тестирования, который позволит параллельно запускать тесты в разных браузерах. Только начинаю над этим работать поэтому хотелось бы, по возможности, наступить на чужие грабли :) А также услышать мнения о том, как лучше его реализовать.
Есть 4 сервера, на которых параллельно нужно запускать тесты:
Testserver 1 - PC - Текущие версии браузеров(IE 9, Chrome 22, FF 15)
Testserver 2 - PC - Предыдукущие версии браузеров(IE 8, Chrome 21, FF14)
Testserver 3 - Mac - Текущие версии браузеров(Safari 6, Chrome 22, FF 15)
Testserver 4 - Mac - Предыдукущие версии браузеро(Safari 5, Chrome 21, FF 14)
Никогда раньше не работал с гридом, поэтому, возможно, не так себе его представляю, но ситуация видится мне так:
1. Берём ещё один сервер, на который ставим grid hub
2. Запускаем на каждом из тестовы серверов grid node примерно со следующими настроками:
Каким образом реализовать их параллельный запуск используя TestNG и, если потребуется, Maven?
Не будет ли проблем с одновременным запуском(каких-либо нарушений в последовательности действий в тестах, создании помех друг другу)? Если да, то как это лучше решить.
Не будет ли проблем со сбором результатов выполнения тестов? Возможно есть какие-то готовые паттерны решения таких проблем(Для отчёности собираюсь использовать ReportNG)
Я так понимаю есть по крайней мере два варианта запуска тестов:
параллельно во всех браузерах на каждом из тестовых серверов(На тестовом сервере параллельно открываются три браузера и в них начинает пробегать каждый тест) - кажется ненадёжным
последовательно в каждом браузере для каждого сервера(В первом браузере проходить весь test suite, потом то же самое во втором, в третьем) - займёт больше времен
нарушения последовательности тестов не должно быть если указать preserve-order="true", однако я столкнулся с проблемой передачи <parameter name="myparam" value="blabla"/> в каждый паралельный тест. он данное значение берет как-то рандомно, одно из трёх.
При запуске открывается нужное количество окон но в какой-то момент в одном из окон выполнение прекращается. Либо 1 тест не проходит в 1 окне, пока идут во 2-ом, потом 2 тест в 1-ом идёт нормального. Пробовал в FF, в Chrome.
Параллелизуются по tests либо по classes , инстанс браузера создаётся в @BeforeClass, дестроится в @AfterClass. thread-count ставлю 2.
В чём может быть причина наводок “двух” окон друг на друга? Куда есть смысл копать?
Можно ли с помощью Selenium Grid запустить несколько браузеров на одной ноде и добиться большей изолированности нескольких инстансов?
P.S. про Grid естественно в курсе, но быстро его заиспользовать не получится, поэтому было желание получить хоть какой-то профит во времени прогона на первых порах.
Спасибо.
Во-первых, без кода можно строить лишь догадки. Я вас конечно могу удивить, но большинство ошибок подобного рода возникают из-за неверной конфигурации. Во-вторых, идея запуска N тестов в N браузерах параллельно на локальной тачке - мне кажется абсурдной. По разным причинам… Прежде чем влазить в дебри масштабирования, для начала надо позаботиться об организации полноценной инфраструктуры, пригодной для подобного рода тестирования. Ваша автоматизация должна давать какой-то профит. И не вам лично, а членам всей команды. От того, что вы запустите тесты параллельно на рабочей виртуалке, полезнее ваша автоматизация не станет.
Вопросов про организацию инфраструктуры и тестирования нет, где вы его увидели? И где вы увидели слова “локальный” и “рабочая машина”?
Вопрос был совершенно конкретный - могут ли тесты безопасно идти в разных окнах одного браузера на одной машине? Если нет - то вопрос снят. Если да - то я буду тратить дополнительное время на поиск ошибки и дебаг кода.
Вы говорите про неверную конфигурацию - что вы имеете ввиду? Тесты уже запускаются в разных потоках - выше я подробно описал, как это происходит. Если нужно больше информации и знаете какого рода - уточните, я допишу это в вопросе. Список проблем конфигураций ведь конечен.
Совершенно конкретный ответ - могут. Всегда ли, везде и при любых обстоятельствах? Нет.
Выше вы подробно исправили ваш пост только после моего сообщения. До этого ничего подробного он не содержал. Повторюсь еще раз: без кода никаких конкретных ответов вы никогда не получите. И никто не будет тратить время на угадывания, в чем же причина ваших сбоев, коих может быть достаточно много.
Suites не параллелятся, это ограничение testng. Но вы можете сформировать xml с несколькими sub-suites. Да, они будут запускаться последовательно, но к примеру test блоки внутри каждого из них могут при этом запускаться параллельно.
Main suite:
Chrome sub-suite -> tests set for VM 1 / tests set for VM 2
IE sub-suite -> tests set for VM 1 / tests set for VM 2
FF sub-suite -> tests set for VM 1 / tests set for VM 2
сейчас так и сделал Думал, может я упустил чего и подобная возможность уже появилась.
Т.к. как правильно утверждает @vmaximv, в документации появился пункт Parallel suites
Ну технически оно должно было бы работать через pom, если бы не баг. И в 2.18.1 версии он все еще не пофикшен. Я не уверен правда, работало бы оно, если ему подсунуть 1 suite с набором sub-suites, ибо перечислять N suites в pom - не очень забавно. И это бы решило тогда проблему отсутствия возможности задания parallel=suites прямо из конфига.
П.С. Хотя, тут тоже не понятно, как оно будет себя вести, если задать parallel по suites + в самих suites еще параллелить. Лень проверять из cmd.