При распараллеливании тестов с использованием testNG, тесты в классе не выполняются в одном потоке - PullRequest
0 голосов
/ 07 ноября 2018

testng.xml:

<suite name="Default Suite" parallel="classes" thread-count="3">
    <test name="example">
        <classes>
            <class name="ExampleTest"/>
            <class name="ExampleTest2"/>
        </classes>
    </test>
</suite>

тест:

@Test(singleThreaded = true)
public class ExampleTest {

@Test
public void firstTest() {
    // first test
}

@Test(dependsOnMethods = "firstTest")
public void secondTest() {
    // second test depends from first test
}
}

тесты выполняются в трех потоках, но первый тест находится в одном потоке, а второй во втором, соответственно, второй отбрасывается, поскольку это зависит от первого. Как запустить параллельные тесты так, чтобы все тесты в одном классе выполнялись в одном потоке?

Заранее спасибо.

1 Ответ

0 голосов
/ 10 ноября 2018

В TestNG была ошибка. Вот ссылка на выпуск GitHub .

Начиная с 7.0.0-бета1 это исправлено. Но вы должны установить -Dtestng.thread.affinity=true в качестве аргумента JVM. Шаги IntelliJ IDEA: перейдите в «Выполнить» -> «Редактировать конфигурации»:

dtestng.thread.affinity=true testng dependsOnMethods

TestClass1:

import org.testng.annotations.Test;
import org.testng.log4testng.Logger;

public class TestClass1 {
    private static final Logger LOGGER = Logger.getLogger(TestClass1.class);

    @Test
    public void test1() {
        LOGGER.warn("TestClass1 - test1. Thread " + Thread.currentThread().getId());
    }

    @Test(dependsOnMethods = "test1")
    public void test2() {
        LOGGER.warn("TestClass1 - test2. Thread " + Thread.currentThread().getId());
    }
}

TestClass2:

public class TestClass2 {
    private static final Logger LOGGER = Logger.getLogger(TestClass1.class);

    @Test
    public void test1() {
        LOGGER.warn("TestClass2 - test1. Thread " + Thread.currentThread().getId());
    }
}

TestNG XML:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="Default Suite" parallel="classes" thread-count="3">
    <test name="example">
        <classes>
            <class name="com.stackover.project.TestClass1"/>
            <class name="com.stackover.project.TestClass2"/>
        </classes>
    </test>
</suite>

Выход:

[TestClass1] [WARN] TestClass1 - test1. Thread 11
[TestClass1] [WARN] TestClass2 - test1. Thread 12
[TestClass1] [WARN] TestClass1 - test2. Thread 11

===============================================
Default Suite
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0
===============================================

P.S .: Если TestClass1.test1() завершится неудачей, TestClass1.test2() будет проигнорировано.

...