【发布时间】:2020-11-25 20:32:29
【问题描述】:
我正在尝试提高 Spring Boot 中 medium 测试的性能。
我正在使用Spring Boot - testcontainers 库。
对于单独的测试,这非常有效,只需添加一些注释,我就可以访问 kafka、zookeeper 和 schema-registry。这些是完整的服务,因此启动一切需要几秒钟,所有设置总共需要大约 40 秒。该测试准确地重新创建了一个真实的部署,非常简单。
如果它只发生一次就好了,但每次创建 Spring 上下文时都会发生。这意味着使用 @MockBean 的每个测试都会产生 40 秒的成本。
我尝试重构为单个 TestConfiguration 类并引用它。我已经研究过使用 ContextHierarchy,但我认为这意味着我将失去所有 Spring Boot 的细节,我需要重新创建上下文(这意味着它看起来与生产应用程序创建的上下文不完全相同)。
有没有更好的方法来做到这一点?
【问题讨论】:
-
为每个测试启动一个新的 ApplicationContext 是设计使然。它可以防止奇怪的副作用影响无关的测试。比如,如果一个失败的测试在 kafka 中留下了一条消息,会发生什么?它将开始无法通过其他测试。这将使查明错误的来源变得更加困难。
-
我最近发表了一篇关于上下文缓存机制的文章,对你有帮助rieckpil.de/…。为了进一步减少本地构建时间,您还可以使用 Testcontainers 重用容器:rieckpil.de/…
标签: spring-boot spring-boot-test testcontainers