使用 docker 进行持续交付的集成测试
Integration tests for continuous delivery using docker
我目前开发的产品公开了 REST API,最终将托管在云端。
我的技术栈是spring(boot、mvc、data、test等)在maven之上。我有集成测试要从我的 API 连接到测试数据库进行测试。
为了在与生产环境相同的环境中更好地测试我的产品 运行,我想使用容器来执行我的集成测试。我的目标是遵循这个持续交付工作流:
- 编译
- 运行 单元测试
- 构建应用程序 (jar) 并部署到中央存储库
- 使用此存档创建一个 docker 容器
- 启动容器(使用spring引导)
- 运行 针对 运行ning 容器的集成测试
- 运行 性能测试
- 如果一切正常,将此容器部署到中央存储库
- 将同一个容器部署到产品中(只是使用不同的命令行参数)。
这种方法的好处是在生产阶段具有相同的容器形式集成测试阶段,这看起来很理想,不是吗?
但是我不知道如何使用驻留在我的源包中的 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 容器、之前和测试执行后。它可以为所有集成测试使用同一个容器,也可以为每个测试启动一个新容器,它是可配置的。
最好,
奥兰多
我目前开发的产品公开了 REST API,最终将托管在云端。
我的技术栈是spring(boot、mvc、data、test等)在maven之上。我有集成测试要从我的 API 连接到测试数据库进行测试。
为了在与生产环境相同的环境中更好地测试我的产品 运行,我想使用容器来执行我的集成测试。我的目标是遵循这个持续交付工作流:
- 编译
- 运行 单元测试
- 构建应用程序 (jar) 并部署到中央存储库
- 使用此存档创建一个 docker 容器
- 启动容器(使用spring引导)
- 运行 针对 运行ning 容器的集成测试
- 运行 性能测试
- 如果一切正常,将此容器部署到中央存储库
- 将同一个容器部署到产品中(只是使用不同的命令行参数)。
这种方法的好处是在生产阶段具有相同的容器形式集成测试阶段,这看起来很理想,不是吗?
但是我不知道如何使用驻留在我的源包中的 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 容器、之前和测试执行后。它可以为所有集成测试使用同一个容器,也可以为每个测试启动一个新容器,它是可配置的。
最好, 奥兰多