gpt4 book ai didi

java - 避免每次集成测试发生微小变化时都重新启动服务器

转载 作者:行者123 更新时间:2023-11-30 05:36:11 26 4
gpt4 key购买 nike

避免每次集成测试发生微小变化时都重新启动服务器

我是 Spring 新手,在 Spring 上编写集成测试时感到很痛苦。

例如,假设我正在运行集成测试并更改下面的代码。

看,没有任何与服务器代码更改相关的内容。

要运行新更新的集成测试代码,我必须再次启动网络服务器和数据播种,这可能需要 5 分钟的时间。

很难想象人们如何管理这种发展方式。

我不确定是否可以通过 bootRun 启动网络服务器,并且集成测试应该尝试与专用服务器进行通信,而无需重新启动服务器来运行测试。

通常,哪个部分配置文件将定义此行为?

我接手了这个项目,并且必须自己解决这个问题。

之前

    serverResp.then()
.statusCode(203)
.body("query.startDateTime", equalTo("2018-07-01T00:00:00"))

之后

    serverResp.then()
.statusCode(200)
.body("query.endDateTime", equalTo("2020-07-01T00:00:00"))

最佳答案

有许多不同的方法可以进行集成测试。Spring有一个内置框架,可以在与真实服务器相同的JVM中运行集成测试。如果应用程序很重(通常与整体相关),那么运行它确实需要时间,那么您能做的最好的事情就是“选择”要加载与测试相关的应用程序部分。在 Spring 中有多种方法可以实现这一点,问题是您的应用程序代码是否允许这种分离。

然后有一种方法可以编写集成测试,以便它们确实与“提前”启动并运行的远程服务器进行通信。在构建过程中,这可以在测试阶段之前完成一次,然后当测试完成时,服务器应该关闭。

通常这样的测试有一些方法来指定用于通信的服务器主机/端口(我把安全性、凭据等放在一边)。因此,您可以检查是否有一些特殊的标志/系统属性 - 从那里读取主机/端口。

这种方法的一个好处是您不需要在每次测试之前重新启动服务器。坏处是它并不总是允许轻松测试:如果您的测试部署了一些测试数据,则该测试还必须在测试结束时删除这些数据。测试必须仔细设计。

第三种方法是一种混合方法,在我看来通常不是主流:您可以创建一个特殊的设置,在不同的 JVM(外部)中运行测试,但一旦测试开始,其字节码就会上传到正在运行的服务器(服务器必须有后门),并且实际的字节码会在服务器上实际执行。服务器再次启动并运行。

我曾经写过一个库来用 Spock 来做这件事,但那是很久以前的事了,我们毕竟没有使用过它(那个项目已经关闭了)。

不想 self 做广告什么的,但你可以check it out也许可以借鉴如何做到这一点的技术想法。

关于java - 避免每次集成测试发生微小变化时都重新启动服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56567912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com