在不加载应用程序上下文和不模拟真实测试环境的情况下执行 springboot 测试——这是可能的

rav*_*kar 5 spring-boot-test

我有个问题。请求您的帮助。我们有一个 Spring Boot 应用程序,我编写了没有 Mocks 的集成测试,而是使用TestRestTemplate@SpringbootTest.

因此,在本地计算机上,当我执行测试时,它们执行得很好,正如我MyApplication.class在里面给出的@SpringbootTest 那样,它将启动 spring 应用程序上下文并执行测试。

到这里一切都很好。

但我们将此应用程序部署在不同的测试环境(例如 qa、e2e、staging)上,然后部署在生产环境上。因此,我们必须针对上述环境执行 Jenkins 作业进行集成测试作为验收测试。

我在这里的问题是:

  • 当我在 jenkins 上执行这些测试时,测试在 Jenkins Slave 机器上执行(在可用执行器中随机选择),它将到达端点(qa 或 e2e 或登台或生产端点)并发送其余请求并获取响应并验证。但是测试启动詹金斯从机上的应用程序上下文并加载到随机端口上,并且将在詹金斯从机上可用,直到测试完成,尽管我根本不与应用程序上下文交互(因为我正在点击外部测试结束)点)。 当我尝试对真实测试服务器运行测试时,是否有任何选项不加载 spring 应用程序上下文,并在本地测试时加载应用程序上下文?

请帮助..我是 Spring Boot 的新手,被困在这里。

预先非常感谢

小智 0

TestRestTemplate如果您想使用orRestTemplate并希望由 Spring 配置它,答案是否定的。您甚至必须将 的 设置为webEnvironment,否则上下文将不会有SpringBootTestRANDOM_PORTDEFINED_PORTTestRestTemplate

如果您愿意手动配置它,那么您将不需要注释SpringBootTest,并且您将不会有任何 Spring 上下文。

TestRestTemplate非常适合将本地主机上的当前应用程序作为SpringBootTest. 还有其他集成测试替代方案,例如RestAssured,不需要 Spring 来执行。