【问题标题】:@QuarkusTest unit tests take a long time@QuarkusTest 单元测试需要很长时间
【发布时间】:2021-09-21 12:55:25
【问题描述】:

我开始了一个项目,现在我的项目中有大约 7 个测试,使用 gradle test 执行整个测试套件已经花费了超过一分钟。

从附加输出(--info 标志)我可以看到,对于每个测试类和方法,整个 quarkus 应用程序以及 mongodb 实例等依赖项都会重新启动。

这与 quarkus 文档在测试指南页面上所说的完全相反:

到目前为止,在我们所有的示例中,我们只为所有测试启动一次 Quarkus。在运行第一个测试之前,Quarkus 将启动,然后所有测试将运行,最后 Quarkus 将关闭。这提供了非常快速的测试体验,但它有点受限,因为您无法测试不同的配置。

所有测试都用@QuarkusTest 注释,每个测试只测试一个端点。

我使用“纯”kotlin (1.5.21)、Quarkus 版本 2.2.2.Final 和 gradle 6.9。 已安装的功能:cdi、config-yaml、jacoco、kotlin、mongodb-client、mongodb-panache-kotlin、narayana-jta、rest-client、rest-client-jackson、resteasy、resteasy-jackson、smallrye-context-propagation、smallrye -health,smallrye-openapi,swagger-ui

这是正常行为吗?如果是的话,一个包含数百个测试的应用程序很容易需要大约 20 分钟或更长时间来运行整个测试套件。

我还没有尝试过 maven,所以我无法验证这不是与 gradle 相关的问题。

【问题讨论】:

  • 我与 maven 有类似的设置,这不是我们在 2K 测试中的正常行为,并且依赖项仅启动一次,您是否有任何与 junit 相关的其他配置可能导致此问题?你能分享一个复制器吗?
  • 你能打开一个问题让我们调查一下吗?
  • 我将尝试设置一个项目来重现该问题,因为我无法共享原始代码。我会相应地更新问题。

标签: testing quarkus


【解决方案1】:

在尝试使用新项目重现它时,我想我发现我的代码存在问题: 我还在测试中使用了@QuarkusTestResourcesrestrictToAnnotatedClass=true。 这意味着必须重新加载配置和测试配置文件,因此也需要重新加载 quarkus 应用程序。 显然,所有 DevServices 也会重新启动(在我的情况下,它是一个 mongodb,因为我使用的是 panache 扩展),这解释了测试的长时间运行。

我稍微重新组织了我的测试,因此它们使用“全局”测试资源(在我的例子中是 WireMockServer)。 现在 quarkus 只在测试前启动一次,gradle 测试任务的总运行时间是可以接受的。

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2020-03-18
    • 1970-01-01
    • 2018-10-16
    • 2018-12-07
    • 1970-01-01
    相关资源
    最近更新 更多