gradle - 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
..但是已经看到,通常当测试失败时,它们的输出不包含在测试报告中。
这是一个已知的问题?有什么解决方法吗?
解决方案
事实证明,问题可能实际上与 gradle 对测试输出的处理有关。在我们的例子中,我们通过在 gradle 中使用并行化而不是在 Junit 中通过将其添加到我们的 gradle 测试任务来解决这个问题:
forkEvery 1
maxParallelForks 20
我不确定最好的价值maxParallelForks
是什么。20
这正是我们开始的,如果需要会调整。Gradle 文档建议根据处理器数量进行设置。(另见这个问题)
maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
此外,Gradle 文档明确警告不要设置forkEvery
为1
并声称它“非常昂贵”。在我们的例子中,它工作得很好,但这可能是因为在 Gradle 中这个项目的设置很少。
要查看的一些相关链接:
- 一个测试类的日志显示在 Gradle 测试报告中其他类的标准输出部分
- https://discuss.gradle.org/t/testng-results-overwritten-when-running-in-parallel/7530
- https://discuss.gradle.org/t/parallel-tests-in-subprojects/34978/9
- 使用 gradle 运行并行测试任务
- https://discuss.gradle.org/t/relationship-between-forkevery-maxparallelfork-and-parallel/25126
推荐阅读
- linux - HP-UX 中的“find -mmin”是什么?
- jquery - 在 shopify parallex 主题中应用 Jsvascript 但脚本无法正常工作
- javascript - interact.js allowFrom 不适用于可拖动元素外部的可拖动句柄
- spring - HazelCast Hibernate52 - 引发无法解析名称 com.hazelcast.hibernate.HazelcastCacheRegionFactory
- ssl - 在 AEM 和第三方服务上启用 SSL 停止工作
- c# - 在组合框中按 Enter/Return 时不会触发 KeyPressEvent
- java - 如何将动态 XML 中的嵌套标签转换为 for 循环?
- gradle - Kotlin gradle 脚本设置
- java - 成功安装后,JAVA 未显示在应用程序中
- unity3d - Unity TCP 服务器冻结