首页 > 解决方案 > JUnit 5 并行测试执行丢失了测试的输出

问题描述

我们有使用 Rest Assured 和 JUnit 5 编写的 API 测试,并尝试并行运行测试,因为测试之间没有依赖关系。我们通过设置尝试了 JUnit 5 的实验性并行执行:

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

..但是已经看到,通常当测试失败时,它们的输出不包含在测试报告中。

这是一个已知的问题?有什么解决方法吗?

标签: gradlejunitjunit5rest-assured

解决方案


事实证明,问题可能实际上与 gradle 对测试输出的处理有关。在我们的例子中,我们通过在 gradle 中使用并行化而不是在 Junit 中通过将其添加到我们的 gradle 测试任务来解决这个问题:

    forkEvery 1
    maxParallelForks 20

我不确定最好的价值maxParallelForks是什么。20这正是我们开始的,如果需要会调整。Gradle 文档建议根据处理器数量进行设置。(另见这个问题

maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1

此外,Gradle 文档明确警告不要设置forkEvery1并声称它“非常昂贵”。在我们的例子中,它工作得很好,但这可能是因为在 Gradle 中这个项目的设置很少。

要查看的一些相关链接:


推荐阅读