通过JUnit 5运行并行测试类

时间:2019-08-29 07:56:10

标签: java junit5 parallel-testing

我的问题是关于如何在JUnit 5测试类中并行运行。

例如,我有两个简单的测试类,它们代表两个分离的测试管道,它们应并行运行。但是,类中的内部测试应按顺序运行。

public class TestClass1 {

    @Test
    public void test1() {
        System.out.println("Executing test 1 in Class 1");
        System.out.println(Thread.currentThread().getId());
        try {
            Thread.sleep(5000);
            Assert.assertTrue(false,"Assertion error in Test 1 Class 1");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test2() {
        System.out.println("Executing test 2 in Class 1");
        Assert.assertTrue(false,"Assertion error in Test 2 Class 1");
        System.out.println(Thread.currentThread().getId());
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class TestClass2 {

    @Test
    public void test2() {
        System.out.println("Executing test 1 in Class 2");
        System.out.println(Thread.currentThread().getId());
        Assert.assertTrue(false,"Assertion error in Class 2");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

3 个答案:

答案 0 :(得分:3)

根据Junit5 docs

配置参数,以并行执行顶级类,但方法在同一线程中

  

junit.jupiter.execution.parallel.enabled = true
  junit.jupiter.execution.parallel.mode.default = same_thread   junit.jupiter.execution.parallel.mode.classes.default =并发

答案 1 :(得分:1)

基本上,您需要以下内容:
1.为每个类别指定“ 执行顺序”:

@Execution(ExecutionMode.CONCURRENT)
public class TestClass1 { 
    ...
}
@Execution(ExecutionMode.CONCURRENT)
public class TestClass2 {
    ...
}

2。添加具有所需并行参数的配置文件。有配置选项:Junit5 User Guide

我有一个在GitHub

上配置的并行演示项目

答案 2 :(得分:0)

为了保留整个类测试序列,我在每种测试方法下添加了@Execution(ExecutionMode.SAME_THREAD)。 我在运行并行测试中遇到的最后一个不便便是测井障碍。 因此,并行启动两个测试后,第一个启动的测试只会显示日志输出。 我在每个帮助程序类中都使用静态记录器: protected static final org.apache.logging.log4j.Logger log = LogManager.getLogger();