Существует два тестовых класса, каждый из которых имеет один метод тестирования с использованием поставщика данных в параллельном режиме.
public class FirstNg {
@Test(dataProvider = "dp11", description="f one")
public void f11(Integer n, String s) throws InterruptedException {
System.out.println("DP FIR ----" + Thread.currentThread().getId() + "----" + System.currentTimeMillis());
Thread.sleep(4000);
}
@DataProvider(parallel = true)
public Object[][] dp11() {
return new Object[][] { new Object[] { 1, "a" }, new Object[] { 2, "b" }, new Object[] { 3, "c" },
new Object[] { 4, "d" }};
}
}
public class SecondNg {
@Test(dataProvider = "dp22", description="f two")
public void f22(Integer n, String s) throws InterruptedException {
System.out.println("DP SEC ----" + Thread.currentThread().getId() + "----" + System.currentTimeMillis());
Thread.sleep(4000);
}
@DataProvider(parallel = true)
public Object[][] dp22() {
return new Object[][] { new Object[] { 1, "a" }, new Object[] { 2, "b" }, new Object[] { 3, "c" },
new Object[] { 4, "d" }};
}
}
Продолжительность тестового запуска рассчитывается с учетом времени, определенного в BeforeSuite и AterSuite.
Случай 1. Работа без настройки параллельного потока.
<suite name="suite" data-provider-thread-count="2">
<test name="test">
<classes>
<class name="FirstNg"/>
<class name="SecondNg"/>
</classes>
</test>
</suite>
Это дает следующий результат.
DP FIR ----12----1552410839748
DP FIR ----11----1552410839752
DP FIR ----12----1552410843753
DP FIR ----11----1552410843756
DP SEC ----13----1552410847763
DP SEC ----14----1552410847764
DP SEC ----13----1552410851767
DP SEC ----14----1552410851768
DURATION - 16.936 secs
Первые две строки начинаются с принадлежности поставщика данных класса FirstNg. Это повторяется попарно по два (равно значению data-provider-thread-count), затем используется поставщик данных класса SecondNg.
Случай 2. Выполнение с параллельной настройкой потоков для методов.
<suite name="Surefire suite" data-provider-thread-count="2" parallel="methods">
<test name="Surefire test">
<classes>
<class name="testngparallel.FirstNg"/>
<class name="testngparallel.SecondNg"/>
</classes>
</test>
</suite>
Это дает следующий результат.
DP SEC ----14----1552412828961
DP FIR ----13----1552412828962
DP FIR ----16----1552412828964
DP SEC ----15----1552412828966
DP FIR ----13----1552412832972
DP FIR ----16----1552412832977
DP SEC ----15----1552412832979
DP SEC ----14----1552412832980
DURATION - 8.161 secs
Первые четыре ряда начинаются вместе. Две строки принадлежат поставщику данных FirstNg, а две другие - SecondNg. Это повторяется до тех пор, пока не будут исчерпаны все строки всех поставщиков данных.
Из этого обсуждения видно, что существует 2 пула, один для провайдера данных и один для других тестов - https://groups.google.com/forum/#!topic/testng-users/BKfSgHoAChU
Добавление параметра parallel = "methods" сокращает время выполнения теста. Также изменена последовательность тестов, перепутаны тесты от обоих датапровайдеров. Какая связь между двумя настройками?
parallel
параметр для обычного тестирования приоритет надparallel
для параметра поставщика данных, когда используются оба параметра? Если параллельно работает более одного провайдера данных, то у каждого из них есть отдельный пул потоков? 14.03.2019