我正在设计一个遗留应用程序的集成测试,我面临着一个问题,我有一个服务´我只想用于一次集成测试运行。
该应用程序包含多个模块、4个spring(非引导)应用程序,这些应用程序正在使用以下服务:
postgresql数据库
rabiitmq示例
elasticsearch示例
整个堆栈当前通过docker compose进行停靠(因此使用docker compose启动整个应用程序,创建数据库模式等)。
我想通过testcontainers实现这一点。所以启动postgresql容器,在那里我运行flyway脚本来创建模式和完整的数据库,其中包含运行所需的数据(其他数据将在单独的测试中添加),然后启动rabbitmq,然后启动elasticsearch示例。
所有这些都会在每次集成测试运行时自动执行。
使用“遗留”spring(非引导)是否可能实现这一点?这是否有可能使它可以在一台服务器上多次运行的进程自动化(这样就不会有任何端口冲突)。我们的目标是在提交合并请求后在sobegit存储库上运行这个程序,以检查是否所有的集成测试都通过了。
谢谢你的建议。
1条答案
按热度按时间rbpvctlc1#
testcontainers从一开始就完全独立于spring,实际上,据我所知,最近才添加了一些与spring boot集成的king。
有几种方法可以实现这一点,最简单的方法是创建一些容器作为测试类字段,如这里所述[1]
是的,在没有碰撞的情况下实现这一点是可能的。简而言之,testcontainers在一个随机主机端口上公开容器的端口(对于postgres的ex5432),为了避免冲突,您可以获得本文中描述的实际端口。对于jdbc容器来说,这可能更容易。
我个人还没有与rabbitmq和elasticsearch合作过,但是有一些模块,你可以在文档中看到。
p、 也可以使用docker compose支持,但我找不到任何原因,仅供参考,上面的方法更简单。
[1]
@Testcontainers
注解将为您启动它们,但您也可以手动管理容器生命周期。