【问题标题】:Running parallel tests classes via JUnit 5通过 JUnit 5 运行并行测试类
【发布时间】:2019-08-29 18:55:25
【问题描述】:

我的问题是关于如何在 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();
        }
    }
}

【问题讨论】:

    标签: java junit5 parallel-testing


    【解决方案1】:

    根据Junit5 docs

    用于并行执行顶级类但在同一线程中执行方法的配置参数

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

    【讨论】:

      【解决方案2】:

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

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

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

      我有一个在GitHub 上配置并行的演示项目

      【讨论】:

      • 我还在测试方法顺序注释中使用了`@TestMethodOrder(OrderAnnotation.class)` 添加@Execution(ExecutionMode.CONCURRENT)后,类中的测试也以随机顺序运行。我还根据上面的@Ezequiel 注释添加了 junit-platform.properties,并带有以下参数:junit.jupiter.execution.parallel.enabled=true junit.jupiter.execution.parallel.config.strategy=fixed junit.jupiter.execution.parallel.config.fixed.parallelism=4 junit.jupiter.execution.parallel.mode.classes.default = concurrent junit.jupiter.execution.parallel.mode.default = same_thread
      • @natanbig 在这种情况下你需要:junit.jupiter.execution.parallel.mode.default = same_threadjunit.jupiter.execution.parallel.mode.classes.default = concurrent
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-10-18
        • 2016-11-03
        • 1970-01-01
        • 2011-11-12
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 2020-12-31
        相关资源
        最近更新 更多