TestNG параллельные тестовые классы - PullRequest
0 голосов
/ 20 февраля 2011

У меня есть 3 класса теста:

Первый тест:

public class FirstTest {

    @BeforeClass(alwaysRun = true)
    public void setUp() {
        System.out.println("FirstTest: set up class");
    }

    @Test(groups = "FirstTest")
    public void test1() {
        System.out.println("FirstTest: test1");
    }

    @Test(groups = "FirstTest")
    public void test2() {
        System.out.println("FirstTest: test2");
    }

    @Test(
            groups = "FirstTest",
            dependsOnMethods = "test2"
    )
    public void test3() {
        System.out.println("FirstTest: test3");
    }

    @Test(
            groups = {"FirstTest", "first:4"},
            dependsOnMethods = "test3"
    )
    public void test4() {
        System.out.println("FirstTest: test4");
    }

    @AfterClass(alwaysRun = true)
    public void tearDown() {
        System.out.println("FirstTest: tear down class");
    }
}

Второй тест:

public class SecondTest {

    @BeforeClass(alwaysRun = true)
    public void setUp() {
        System.out.println("SecondTest: set up class");
    }

    @Test(groups = "SecondTest")
    public void test1() {
        System.out.println("SecondTest: test1");
    }

    @Test(groups = "SecondTest")
    public void test2() {
        System.out.println("SecondTest: test2");
    }

    @Test(
            dependsOnGroups = "first:4",
            groups = "SecondTest"
    )
    public void test3() {
        System.out.println("SecondTest: test3");
    }

    @Test(groups = "SecondTest")
    public void test4() {
        System.out.println("SecondTest: test4");
    }

    @AfterClass(alwaysRun = true)
    public void tearDown() {
        System.out.println("SecondTest: tear down class");
    }
}

Другой тест:

public class OtherTest {

    @BeforeClass(alwaysRun = true)
    public void setUp() {
        System.out.println("OtherTest: set up class");
    }

    @Test(groups = "OtherTest")
    public void test1() {
        System.out.println("OtherTest: test1");
    }

    @Test(groups = "OtherTest")
    public void test2() {
        System.out.println("OtherTest: test2");
    }

    @Test(groups = "OtherTest")
    public void test3() {
        System.out.println("OtherTest: test3");
    }

    @Test(groups = "OtherTest")
    public void test4() {
        System.out.println("OtherTest: test4");
    }

    @AfterClass(alwaysRun = true)
    public void tearDown() {
        System.out.println("OtherTest: tear down class");
    }
}

Я хочузапускать их в несколько потоков - один поток на класс.Запуск тестов из каждого класса не должен прерываться для выполнения других тестов, пока весь тестовый класс не будет пройден.Но у меня есть следующий результат (например, один поток):

TestNG.xml:

<suite name="Suite1" parallel="classes" thread-count="1" verbose="10">
  <test name="sample" preserve-order="true" >
    <classes>
       <class name="sample.testng.FirstTest" />
       <class name="sample.testng.SecondTest" />
       <class name="sample.testng.OtherTest" />
    </classes>
  </test>
</suite>

Фактический результат:

sample.testng.SecondTest.setUp() 21480956
    sample.testng.SecondTest.test4() 21480956
    sample.testng.SecondTest.test1() 21480956
    sample.testng.SecondTest.test2() 21480956
sample.testng.OtherTest.setUp() 32782069
    sample.testng.OtherTest.test4() 32782069
    sample.testng.OtherTest.test1() 32782069
    sample.testng.OtherTest.test3() 32782069
    sample.testng.OtherTest.test2() 32782069
sample.testng.OtherTest.tearDown() 32782069
sample.testng.FirstTest.setUp() 2623667
    sample.testng.FirstTest.test1() 2623667
    sample.testng.FirstTest.test2() 2623667
    sample.testng.FirstTest.test3() 2623667
    sample.testng.FirstTest.test4() 2623667
sample.testng.FirstTest.tearDown() 2623667
    sample.testng.SecondTest.test3() 21480956
sample.testng.SecondTest.tearDown() 21480956

Как получить следующий результат?

sample.testng.SecondTest.setUp() 21480956
    sample.testng.SecondTest.test4() 21480956
    sample.testng.SecondTest.test1() 21480956
    sample.testng.SecondTest.test2() 21480956
    sample.testng.SecondTest.test3() 21480956
sample.testng.SecondTest.tearDown() 21480956
sample.testng.OtherTest.setUp() 32782069
    sample.testng.OtherTest.test4() 32782069
    sample.testng.OtherTest.test1() 32782069
    sample.testng.OtherTest.test3() 32782069
    sample.testng.OtherTest.test2() 32782069
sample.testng.OtherTest.tearDown() 32782069
sample.testng.FirstTest.setUp() 2623667
    sample.testng.FirstTest.test1() 2623667
    sample.testng.FirstTest.test2() 2623667
    sample.testng.FirstTest.test3() 2623667
    sample.testng.FirstTest.test4() 2623667
sample.testng.FirstTest.tearDown() 2623667

Ответы [ 2 ]

0 голосов
/ 26 сентября 2014

Вам нужно увеличить количество потоков = 3

<suite name="Suite1" parallel="classes" thread-count="3" verbose="10">
  <test name="sample" preserve-order="false" >
    <classes>
       <class name="sample.testng.FirstTest" />
       <class name="sample.testng.SecondTest" />
       <class name="sample.testng.OtherTest" />
    </classes>
  </test>
</suite>

Когда вы говорите, что хотите запустить 3 тестовых класса параллельно, но вы пропускаете только 1 поток.

0 голосов
/ 22 февраля 2011

Если вы хотите запустить 1. SecondTest 2. OtherTest 3. FirstTest, как вы указали в своем окончательном списке, почему вы используете preserve-order с классами, перечисленными как

   <class name="sample.testng.FirstTest" />
   <class name="sample.testng.SecondTest" />
   <class name="sample.testng.OtherTest" />

вместо

   <class name="sample.testng.SecondTest" />
   <class name="sample.testng.OtherTest" />
   <class name="sample.testng.FirstTest" />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...