У меня тут голова закружилась, и я не знаю, как с этим справиться. У меня есть несколько тестовых классов, которые запускаются через xml. Около 90 тестовых классов, в каждом из которых около 10+ @Test
шагов. У меня настроена сетка селена с maxSession=5
, поэтому не более 5 параллельных экземпляров браузера могут работать параллельно на одном узле. Вот часть, которую я НЕ понимаю. Допустим, я запускаю этот XML-файл со всеми этими тестовыми классами, я устанавливаю свой thread-count=10
, надеясь, что 10 тестов будут запускаться одновременно. Что происходит, так это то, что ВСЕ мои тестовые классы запускаются, они не ждут в очереди (как я думал, установка количества потоков на 10 будет делать), и они пропускают, тайм-аут, сбой, что угодно. Я понимаю, как maxSession
может обрабатывать то, что запускается в сетке, но когда запускается xml, как я могу ограничить количество запускаемых тестовых классов, чтобы не перегружать сетку!
Ограничение количества параллельных тестов с помощью ThreadCount TestNG
Ответы (2)
вы можете использовать атрибут parallel
для установки параллельных классов.
<suite name="Example" verbose="0" thread-count="5" parallel="classes">
...
</suite>
Другой важный момент: есть ли у вас реализация threadsafe? Если нет, то он не будет работать должным образом.
На самом деле testNG может создавать гораздо больше потоков, чем определено в thread-count. Это происходит в следующих случаях (список не точен):
- у вас есть @DataProvider с parallel=true. Каждый вызванный провайдер может занимать до dataproviderthreadcount дополнительных потоков (поэтому с thread-count=10 и dataproviderthreadcount = 5 у вас будет до 50 потоков)
- у вас есть @Test с threadPoolSize > 1 и invocationCount > 1. Каждый такой тест добавит потоки min (threadPoolSize, invocationCount).
Также будьте осторожны с тайм-аутом для тестов веб-драйвера на сетке. Потому что, когда вы звоните
WebDriver wd = new RemoteWebDriver(...);
это приостановит выполнение вашего теста до тех пор, пока у grid-hub не будет свободного узла для вас (по умолчанию концентратор ждет вечно, см. Параметр newSessionWaitTimeout). Таким образом, даже если «активная» фаза ваших тестов занимает всего 120 секунд, общая продолжительность теста может быть намного больше (зависит от нагрузки на сетку, от структуры ваших тестовых классов, порядка выполнения и т. д.)