【问题标题】:Run Spring test cases concurrently not sequentially不按顺序同时运行 Spring 测试用例
【发布时间】:2019-09-14 05:56:09
【问题描述】:

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

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

我已尝试在我的 gradle 文件中设置 test 部分,使其具有“forkCount”,我还尝试设置诸如 parallel="classes" 之类的选项,但这会产生有关“ parallel' 是一个未知属性(也许是 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 应用程序的单个实例(如果我可以让这些方法也并行运行,那就太棒了

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

并在 gradle 文件中添加 'ma​​xParallelForks' 条目,我已经使用了 @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)。

【问题讨论】:

    标签: spring spring-boot junit


    【解决方案1】:

    您需要将@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

    【讨论】:

    • 这不起作用。与我尝试过的“forkCount”类似,它启动了应用程序的多个实例。这可以在关闭时看到,因为我从我的 gRPC 服务器进程收到 2 条消息:2019-04-25 10:24:17.245 INFO **53838** shutting down gRPC server since JVM is shutting down 2019-04-25 10:24:30.125 INFO **53839** shutting down gRPC server since JVM is shutting down 您可以从 PID(在双“*”中)看到它们是不同的。
    • 嗨,Jim,您能发布一个使用 gRPC 并具有 @SpringBootTest 的测试吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多