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

时间:2015-05-07 21:07:59

标签: continuous-integration docker continuous-deployment spring-test integration-testing

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

我的技术堆栈是maven上的spring(boot,mvc,data,test等)。我有集成测试来测试连接到测试数据库的API。

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

  • 编译
  • 运行单元测试
  • 构建应用程序(jar)并部署到中央存储库
  • 使用此存档创建一个docker容器
  • 启动容器(使用弹簧启动)
  • 针对正在运行的容器运行集成测试
  • 运行性能测试
  • 如果一切正常,请将此容器部署到中央存储库
  • 将此同一容器部署到prod(仅使用不同的命令行参数)。

这种方法的优点是具有相同的容器形式集成测试阶段到生产,这似乎是理想的,不是吗?

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

有没有人尝试过这样的方法?我在这里想念一下吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

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

相反, Spring MVC测试框架的主要目标是提供一流的" 支持,通过流畅的方式测试客户端和服务器端的Spring MVC代码API &#34。此外," 使用DispatcherServlet来处理请求,从而近似完整集成测试,而无需运行的Servlet容器。"

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

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

此致

萨姆

答案 1 :(得分:1)

我一直在研究涵盖你指出的大部分项目符号的演示代码,除了最后一篇。我刚创建了一篇博文:Integration Testing using Spring Boot, Postgres and Docker,它引用了Postgres DB的几个bitbucket repos Docker镜像(Docker hub中的可用图像)和Spring Boot测试演示。

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

最佳, 奥兰多