2013-03-07 10 views
6

Mam klasy testowej z wieloma metodami, gdzie każdy z nich ma dość dostawcy danych równoległych. Chcę osiągnąć mieszaną kolejność wykonywania metod, ale nie mogę kontrolować wielkości puli wątków dostawcy danych - jest ona mulitplicated pod względem liczby metod testowania. Proszę zobaczyć przykład:TestNG Suite z równoległym DataProvider i losową kolejnością metod - jak osiągnąć?

Moja definicja zestaw testowy:

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

Moja klasa 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(); 
} 

Przy takiej konfiguracji zestawu testów udało mi się osiągnąć, że egzekucje test1() i test2() są mieszane, ale dane Pula wątków dostawcy to nie 5, ale 10! Dodanie nowych metod testowych zwielokrotnia liczbę wątków. Jest to dla mnie zaskakujące, ponieważ strona z dokumentacją testNg mówi: "Równolegliwi dostawcy danych działający z pliku XML dzielą tę samą pulę wątków". Czy po prostu używam niesłusznie atrybutu "równoległego"? Jeśli tak, czy możliwe jest osiągnięcie mojego celu (mieszana kolejność realizacji metod wraz z dostawcami danych) w inny sposób?

Próbowałem również użyć jednego dostawcę danych i tworzenie danych testowych na podstawie wtryskiwanego metody badania, ale to nie pomaga, patrz poniżej:

@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; 
} 

Wciąż dostaję 10 egzekucje testowe uruchomione równolegle . Przenoszenie metod dostawcy danych w celu oddzielenia klasy również nie pomaga.

+0

Proszę zobaczyć moją odpowiedź na następujące pytanie: https://stackoverflow.com/a/46156794/4178795 – sanitar4eg

Odpowiedz

2

Czy próbowałeś dopasować parametry dla @Testu?

@Test(dataProvider = "dp", threadPoolSize=5) 
Powiązane problemy