Ограничение количества параллельных тестов с помощью ThreadCount TestNG

У меня тут голова закружилась, и я не знаю, как с этим справиться. У меня есть несколько тестовых классов, которые запускаются через xml. Около 90 тестовых классов, в каждом из которых около 10+ @Test шагов. У меня настроена сетка селена с maxSession=5, поэтому не более 5 параллельных экземпляров браузера могут работать параллельно на одном узле. Вот часть, которую я НЕ понимаю. Допустим, я запускаю этот XML-файл со всеми этими тестовыми классами, я устанавливаю свой thread-count=10, надеясь, что 10 тестов будут запускаться одновременно. Что происходит, так это то, что ВСЕ мои тестовые классы запускаются, они не ждут в очереди (как я думал, установка количества потоков на 10 будет делать), и они пропускают, тайм-аут, сбой, что угодно. Я понимаю, как maxSession может обрабатывать то, что запускается в сетке, но когда запускается xml, как я могу ограничить количество запускаемых тестовых классов, чтобы не перегружать сетку!


person Tree55Topz    schedule 18.05.2016    source источник
comment
Если у вас есть 90 тестовых классов и в среднем 10 тестов внутри каждого, вы говорите, что все 900 методов запускаются параллельно? Ваши тестовые классы могут запускаться параллельно в зависимости от того, что вы установили в параметре parallel.   -  person niharika_neo    schedule 19.05.2016


Ответы (2)


вы можете использовать атрибут parallel для установки параллельных классов.

<suite name="Example" verbose="0" thread-count="5" parallel="classes"> 
...
</suite>

Другой важный момент: есть ли у вас реализация threadsafe? Если нет, то он не будет работать должным образом.

person user861594    schedule 24.05.2016

На самом деле 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 секунд, общая продолжительность теста может быть намного больше (зависит от нагрузки на сетку, от структуры ваших тестовых классов, порядка выполнения и т. д.)

person Oleksandr Kulychok    schedule 27.11.2017