java - 使用 testNG 并行化测试时,类中的测试不会在同一线程中执行

标签 java class parallel-processing testng selenide

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

测试在三个线程中运行,但第一个测试在一个线程中,第二个测试在第二个线程中,分别,第二个测试会下降,因为它依赖于第一个测试。如何运行并行测试,以便一个类中的所有测试都在一个线程中执行?

提前谢谢您。

最佳答案

TestNG 中存在错误。这是link to GitHub issue .

7.0.0-beta1开始它是固定的。但您应该将 -Dtestng.thread.affinity=true 设置为 JVM 参数。 IntelliJ IDEA 步骤:转到“运行”->“编辑配置”:

dtestng.thread.affinity=true testng dependsOnMethods

测试类1:

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

测试类2:

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() 将被忽略。

关于java - 使用 testNG 并行化测试时,类中的测试不会在同一线程中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53185500/

相关文章:

PHP:通过引用实例化类?

c++ - 并行缩减

multithreading - 如何将 parMap 与一元函数一起使用?

r - R 中具有复杂函数和 plyr 的 tryCatch

java - 将 NetBeans(桌面应用程序)导入 Eclipse

java - 有效的 XML 文档必须有根标签

java - 如何在play 2.4中使用CommonsMailerPlugin

java - Hibernate 映射 MySQL DateTime

python 类属性

CSS:定义类的最佳方式?