2013-03-07 7 views
6

Ho una classe di test con un numero di metodi, in cui ognuno di loro è stufo del provider di dati parallelo. Voglio ottenere un ordine misto di esecuzione dei metodi, ma non riesco a controllare le dimensioni del pool di thread del fornitore di dati, ma è moltiplicato per il numero di metodi di test. Si prega di vedere l'esempio:TestNG suite con DataProvider parallelo e ordine casuale dei metodi: come ottenere?

La mia definizione suite di test:

<suite data-provider-thread-count="5" parallel="methods" preserve-order="false" name="Data provider problem"> 

La mia classe di test:

@Test(dataProvider = "dp1") 
public void test1(TestData testData) { } 

@Test(dataProvider = "dp2") 
public void test2(TestData testData) { } 

@DataProvider(name = "dp1", parallel = true) 
public static Object[][] dp1() { 
    return createTestData1(); 
} 

@DataProvider(name = "dp2", parallel = true) 
public static Object[][] dp2() { 
    return createTestData2(); 
} 

Con tale configurazione suite di test ho ottenuto che le esecuzioni di test1() e test2() sono mescolati, ma i dati pool di thread del provider non è 5, ma 10! L'aggiunta di nuovi metodi di test consente di moltiplicare il numero di thread. Per me è sorprendente come afferma il sito di documentazione testNg: "I provider di dati paralleli in esecuzione da un file XML condividono lo stesso pool di thread". Sto usando erroneamente l'attributo 'parallelo' della suite? In tal caso, è possibile raggiungere il mio obiettivo (ordine misto di esecuzione dei metodi insieme ai fornitori di dati) con altri mezzi?

Ho anche provato ad utilizzare un fornitore di dati e creare dati di test sulla base del metodo di prova iniettato, ma non aiuta, vedi sotto:

@Test(dataProvider = "dp") 
public void test1(TestData testData) { } 

@Test(dataProvider = "dp") 
public void test2(TestData testData) { } 

@DataProvider(name = "dp", parallel = true) 
public static Object[][] dp(Method m) { 
    if (m.getName().equals("test1")) { 
     return createTestData1(); 
    } 
    if (m.getName().equals("test2")) { 
     return createTestData2(); 
    } 
    return null; 
} 

Ancora ottengo 10 esecuzioni di prova parallele . Spostare i metodi del fornitore di dati per separare la classe non aiuta neanche.

+0

Vedere la risposta alla seguente domanda: https://stackoverflow.com/a/46156794/4178795 – sanitar4eg

risposta

2

Hai provato a regolare i parametri per il test @?

@Test(dataProvider = "dp", threadPoolSize=5)