本文介绍了使用testNG并行化测试时,类中的测试不会在同一线程中执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

testng.xml:

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

测试在三个线程中运行,但是第一个测试在一个线程中运行,第二个测试分别在第二个线程中运行,第二个测试下降,因为它取决于第一个线程.如何运行并行测试以使一个类中的所有测试都在一个线程中执行?

tests run in three Threads, but the first test is in one thread, and the second in the second, respectively, the second one drops as it depends on the first one. How to run parallel tests such that all tests in one class are executed in one thread ?

谢谢.

推荐答案

TestNG中存在错误.这是链接到GitHub问题.

There was a bug in TestNG. Here is a link to GitHub issue.

7.0.0-beta1 开始已修复.但是您应该将-Dtestng.thread.affinity=true设置为JVM参数. IntelliJ IDEA步骤:转到运行->编辑配置:

Starting from 7.0.0-beta1 it is fixed. But you should set -Dtestng.thread.affinity=true as JVM argument. IntelliJ IDEA steps: go to Run -> Edit Configurations:

TestClass1:

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:

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:

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

P.S: If TestClass1.test1() fails then TestClass1.test2() will be ignored.

这篇关于使用testNG并行化测试时,类中的测试不会在同一线程中执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-21 05:02