使用 docker 进行持续交付的集成测试

Integration tests for continuous delivery using docker

我目前开发的产品公开了 REST API,最终将托管在云端。

我的技术栈是spring(boot、mvc、data、test等)在maven之上。我有集成测试要从我的 API 连接到测试数据库进行测试。

为了在与生产环境相同的环境中更好地测试我的产品 运行,我想使用容器来执行我的集成测试。我的目标是遵循这个持续交付工作流:

这种方法的好处是在生产阶段具有相同的容器形式集成测试阶段,这看起来很理想,不是吗?

但是我不知道如何使用驻留在我的源包中的 spring mvc 测试来做到这一点。我怎么能用 mockmvc 做这样的事情呢?它如何足够灵活以在开发中进行 运行 集成测试?

有人试过这种方法吗?我在这里错过了什么吗?

提前致谢

Spring MVC 测试框架(即MockMvc)可以不能用于测试Spring 部署在 Servlet 容器中的 Web 应用程序。

相反,Spring MVC 测试框架 的主要目标是首先提供-class“支持通过流畅的 API 测试客户端和服务器端 Spring MVC 代码。”此外,它“使用DispatcherServlet处理请求,因此近似于完整的集成测试而不需要运行 Servlet容器。

上面引用的文字直接来自 Spring 框架参考手册。

综上所述,Spring MVC 测试框架 只能用于容器外集成测试。如果您希望测试部署在 Servlet 容器中的基于 Spring 的 Web 应用程序,您将需要使用其他框架,例如 HtmlUnit、HttpUnit、Selenium 等

此致,

山姆

我一直在编写演示代码,其中涵盖了您指出的大部分项目符号,但最后 3 个项目符号除外。我刚刚创建了一个博客 post:Integration Testing using Spring Boot, Postgres and Docker,其中引用了一些Postgres DB Docker 图片的 bitbucket repos(Docker hub 中也有可用图片)和 Spring 启动测试演示。

它基本上使用 Spring 的 TestExecutionListener 的自定义实现来挂钩测试方法生命周期以管理拉取 Docker 图像、启动/停止 Docker 容器、之前和测试执行后。它可以为所有集成测试使用同一个容器,也可以为每个测试启动一个新容器,它是可配置的。

最好, 奥兰多