J'ai un seul test qui reçoit des données du fournisseur de données. Je souhaite que ce test s'exécute en parallèle avec des valeurs différentes de celles du fournisseur de données.
J'ai essayé une approche comme:
public class IndependentTest
{
@Test(dataProvider = "dp1" ,threadPoolSize=3,invocationCount=1)
public void testMethod(int number)
{
Long id = Thread.currentThread().getId();
System.out.println("HELLO : " + id);
}
@DataProvider(name = "dp1",parallel=true)
public Object[][] dp1() {
return new Object[][] {
new Object[] { 1 },
new Object[] { 2 },
new Object[] { 3 },
new Object[] { 4 },
new Object[] { 5 },
new Object[] { 6 },
new Object[] { 7 },
new Object[] { 8 }
};
}
}
La sortie que j'ai reçue est:
BONJOUR: 10
BONJOUR: 12
BONJOUR: 17
BONJOUR: 11
BONJOUR: 16
BONJOUR: 14
BONJOUR: 13
BONJOUR: 15
A engendré 10 threads alors que j'ai spécifié 5 dans la taille du pool de threads. Pourriez-vous préciser ce qui doit être ajouté à l'extrait de code ci-dessus pour contrôler la taille du pool d'unités d'exécution du fournisseur de données.
Vous devez utiliser dataproviderthreadcount
. Les valeurs threadpoolsize
et invocationcount
ne sont pas obligatoires. Voir détails ici .
Dans testng.xml, vous pouvez définir le nombre de threads pour le fournisseur de données via data-provider-thread-count="3"
.
<suite name="Manage" data-provider-thread-count="3" >
<test name="Manage data tests">
<classes>
<class name="uk.example.ExampleTest"></class>
</classes>
</test>
</suite>
Essayez de définir le pool de threads de la manière suivante:
@BeforeClass
public void setupClassName(ITestContext context) {
context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(5);
context.getCurrentXmlTest().getSuite().setPreserveOrder(false);
}