不按顺序同时运行Spring测试用例

时间:2019-04-24 20:59:00

标签: spring spring-boot junit

我的Spring Boot应用程序还启动了一个gRPC服务及其REST(HTTP)服务。我已经为gRPC和REST编写了特定的测试。但是,当我运行 gradle测试时,这些测试是按顺序运行的;没有理由不能并行运行。

我要拍摄的是在并行执行测试时运行的Spring Boot应用程序的单个实例。

我尝试在gradle文件中设置 test 部分,使其具有'forkCount',我也尝试设置选项,例如parallel =“ classes”,但这会产生有关“平行”是一个未知的属性(也许是junit 5的东西?)

test {
    options {
        parallel = "classes"
//      forkCount = 2
    }
}

forkCount 选项不是我想要的,因为它将启动spring应用程序的多个实例。

我也尝试过从测试类中删除 @RunWith 并制作一个单独的测试类(具有 @RuWith 批注),该类具有以下方法它

    @Test
    void testRunner() {
        JUnitCore.runClasses(ParallelComputer.classes(), {GrpcTests.class, RestTests.class});
    }

但是测试仍然可以按顺序运行。

我也尝试了其他几件事,很抱歉,我没有将它们都方便使用。

目标

理想情况下,我希望的是我的Spring Boot应用程序的单个实例在测试类并行运行时运行(如果我也能使这些方法并行运行,则非常感谢)< / p>

  • Java版本:“ 1.8.0_171”
  • Spring Boot版本:2.0.4.RELEASE
    根据建议,我尝试添加
    @Test
    public void contextLoads() throws Exception {
    }

并在gradle文件中添加' maxParallelForks '条目,我已经在使用 @SpringBootTest 批注,但这与我使用' > forkCount `,至少有2个实例从测试关闭日志中可以看到

2019-04-25 10:24:17.245 LogLevel=INFO   53838 --- shutting down gRPC server since JVM is shutting down
...
2019-04-25 10:24:30.125 LogLevel=INFO   53839 --- shutting down gRPC server since JVM is shutting down

您会看到我收到两个关闭消息,并且显示了PID(53838和53839)。

1 个答案:

答案 0 :(得分:0)

您需要将@SpringBootTest与maxParallelForks结合使用。

使用@SpringBootTest注释单元测试。 @SpringBootTest将启动Spring Boot上下文,该上下文将缓存在所有测试中。

“ Spring Test支持的一个不错的功能是应用程序上下文被缓存在测试之间,因此,如果您在一个测试案例中有多个方法,或者具有相同配置的多个测试案例,它们只会产生启动成本申请一次”

请参阅: https://spring.io/guides/gs/testing-web/

将以下内容添加到build.gradle中。要同时运行多个测试。

tasks.withType(Test) {
    maxParallelForks = 4 //your choice here
}

请参见https://guides.gradle.org/performance/#parallel_test_execution