web-dev-qa-db-fra.com

TestNG Exécution parallèle avec DataProvider

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. 

9
sujith

Vous devez utiliser dataproviderthreadcount. Les valeurs threadpoolsize et invocationcount ne sont pas obligatoires. Voir détails ici .

13
niharika_neo

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>
1
Igor Gladun

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);
}
0
sanitar4eg