При распараллеливании тестов с использованием testNG тесты в классе не выполняются в одном потоке.

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

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

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


person Дмитрий Кучеренко    schedule 07.11.2018    source источник


Ответы (1)


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

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

dtestng.thread.affinity = true testng playsOnMethods

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

XML TestNG:

<!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() будет проигнорирован.

person Andrey Kotov    schedule 09.11.2018