Короче говоря, parallel = true
для аннотации поставщика данных позволяет использовать отдельный пул потоков для каждой итерации метода с тестовыми данными независимо от параллельного метода / класса / tests / none.
Когда вы добавляете parallel = true
к аннотации поставщика данных, он будет рассматривать отдельный пул с размером, указанным с помощью data-provider-thread-count
(по умолчанию 10). Поэтому, когда есть очередь теста с поставщиком данных, он будет выполняться параллельно с использованием отдельного пула потоков, даже если вы установили parallel=none
в конфигурации пакета.
Дело parallel=none
и поставщик данных parallel = false
или не задано:
Каждый метод, включая итерации поставщика данных, будет выполняться в одном потоке.
DP FIR ----1----1552433313814
DP FIR ----1----1552433317824
DP FIR ----1----1552433321834
DP FIR ----1----1552433325839
Normal FIR2 ----1----1552433329848
DP SEC ----1----1552433333855
DP SEC ----1----1552433337859
DP SEC ----1----1552433341865
DP SEC ----1----1552433345871
Normal SEC2 ----1----1552433349876
Корпус parallel=none
и поставщик данных parallel = true
:
Все методы должны выполняться последовательно в одном и том же потоке, чтобы принимать методы, управляемые данными. Если метод управляется данными, когда приходит очередь, текущий поток будет использовать отдельный пул для параллельного запуска каждой итерации в случае data-provider parallel = true
. В приведенном ниже исполнении один поставщик данных установлен на parallel = true
, а другой нет. Таким образом, вы можете видеть, что текущий поток выполняет итерацию в отдельном пуле для «DP FIR» и выполняет все итерации в текущем потоке для «DP SEC». (data-provider-thread-count не предоставлен, следовательно, по умолчанию 10)
DP FIR ----10----1552433554893
DP FIR ----12----1552433554893
DP FIR ----11----1552433554893
DP FIR ----13----1552433554894
Normal FIR2 ----1----1552433558907
DP SEC ----1----1552433562916
DP SEC ----1----1552433566923
DP SEC ----1----1552433570928
DP SEC ----1----1552433574933
Normal SEC2 ----1----1552433578938
<suite name="suite" >
<test name="test">
<classes>
<class name="FirstNg" />
<class name="SecondNg" />
</classes>
</test>
</suite>
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);
}
@Test
public void f12() throws InterruptedException {
System.out.println("Normal FIR2 ----" + Thread.currentThread().getId() + "----" + System.currentTimeMillis());
Thread.sleep(4000);
}
@DataProvider(parallel = true)
//@DataProvider
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);
}
@Test
public void f222() throws InterruptedException {
System.out.println("Normal SEC2 ----" + Thread.currentThread().getId() + "----" + System.currentTimeMillis());
Thread.sleep(4000);
}
//@DataProvider(parallel = true)
@DataProvider
public Object[][] dp22() {
return new Object[][] { new Object[] { 1, "a" }, new Object[] { 2, "b" }, new Object[] { 3, "c" },
new Object[] { 4, "d" }};
}
}
Дело parallel=methods or classes
:
С parallel=methods
Он начнет выполняться параллельно, в зависимости от пула размера, предоставленного thread-count
в конфигурации xml. Опять же, если метод управляется данными, когда наступит очередь, выделенный поток будет выполнять каждую итерацию в параллельном отдельном пуле. В противном случае выделенный поток запускает каждую итерацию последовательно.
Вы видите, что поток, назначенный для "DP FIR", выполняет итерацию в отдельном пуле для "DP FIR", но выполняет все итерации в назначенном потоке для "DP SEC".
DP FIR ----14----1552433989613
Normal FIR2 ----11----1552433989614
DP FIR ----17----1552433989613
DP SEC ----12----1552433989613
DP FIR ----16----1552433989613
DP FIR ----15----1552433989616
Normal SEC2 ----13----1552433989617
DP SEC ----12----1552433993625
DP SEC ----12----1552433997632
DP SEC ----12----1552434001640
Кейс parallel=methods or classes
и поставщик данных parallel = false
или не установлены:
когда наступит очередь метода, управляемого данными, каждая итерация будет выполняться последовательно в выделенном потоке.