博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring、Spring Boot和TestNG测试指南 - 集成测试中用Docker创建数据库
阅读量:6505 次
发布时间:2019-06-24

本文共 3873 字,大约阅读时间需要 12 分钟。

在一篇里我们使用的是H2数据库,这是为了让你免去你去安装/配置一个数据库的工作,能够尽快的了解到集成测试的过程。

在文章里也说了:

在真实的开发环境中,集成测试用数据库应该和最终的生产数据库保持一致

那么很容易就能想到两种解决方案:

  1. 开发团队使用共用同一个数据库。这样做的问题在于:当有多个集成测试同时在跑时,会产生错误的测试结果。
  2. 每个人使用自己的数据库。这样做的问题在于让开发人员维护MySQL数据库挺麻烦的。

那么做到能否这样呢?

  1. 测试启动前,创建一个MySQL数据库
  2. 测试过程中连接到这个数据库
  3. 测试结束后,删除这个MySQL数据库

So, Docker comes to the rescue。

我们还是会以里的FooRepositoryImpl来做集成测试()。下面来讲解具体步骤:

安装Docker

请查阅官方文档。并且掌握Docker的基本概念。

配置fabric8 docker-maven-plugin

顾名思义就是一个能够使用docker的maven plugin。它主要功能有二:

我们这里使用启动Docker container的功能。

大致配置如下

io.fabric8
docker-maven-plugin
0.28.0
mysql:8
docker-mysql.port:3306
123456
test
foo
bar
MySQL init process done. Ready for start up.
start
pre-integration-test
start
stop
post-integration-test
stop

配置maven-failsafe-plugin

org.apache.maven.plugins
maven-failsafe-plugin
integration-test
integration-test
verify
verify
jdbc:mysql://localhost:${docker-mysql.port}/test
foo
bar

执行

三种常见用法:

  • mvn clean integration-test,会启动docker container、运行集成测试。这个很有用,如果集成测试失败,那么你还可以连接到MySQL数据库查看情况。
  • mvn clean verify,会执行mvn integration-test、删除docker container。
  • mvn clean install,会执mvn verify,并将包安装到本地maven 仓库。

下面是mvn clean verify的日志:

...[INFO] --- docker-maven-plugin:0.28.0:start (start) @ spring-test-examples-rdbs-docker ---[INFO] DOCKER> [mysql:8]: Start container f683aadfe8ba[INFO] DOCKER> Pattern 'MySQL init process done. Ready for start up.' matched for container f683aadfe8ba[INFO] DOCKER> [mysql:8]: Waited on log out 'MySQL init process done. Ready for start up.' 13717 ms[INFO][INFO] --- maven-failsafe-plugin:2.22.1:integration-test (integration-test) @ spring-test-examples-rdbs-docker ---[INFO][INFO] -------------------------------------------------------[INFO]  T E S T S[INFO] -------------------------------------------------------...[INFO][INFO] Results:[INFO][INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0[INFO][INFO][INFO] --- docker-maven-plugin:0.28.0:stop (stop) @ spring-test-examples-rdbs-docker ---[INFO] DOCKER> [mysql:8]: Stop and removed container f683aadfe8ba after 0 ms[INFO][INFO] --- maven-failsafe-plugin:2.22.1:verify (verify) @ spring-test-examples-rdbs-docker ---[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------...

可以看到fabric8 dmp在集成测试前后start和stop容器的相关日志,且测试成功。

如何找到MySQL的端口开在哪一个呢?运行docker ps查看端口(注意下面的0.0.0.0:32798->3306/tcp):

CONTAINER ID  IMAGE     COMMAND  CREATED  STATUS    PORTS                                NAMESa1f4b51d7c75  mysql:8   ...      ...      Up 19...  33060/tcp, 0.0.0.0:32798->3306/tcp   mysql-1

参考文档

转载地址:http://dbqyo.baihongyu.com/

你可能感兴趣的文章
linux 淘宝开源监控工具tsar
查看>>
JavaScript 新语法详解:Class 的私有属性与私有方法 ...
查看>>
Java性能优化之JVM GC(垃圾回收机制)
查看>>
积累各种好的链接
查看>>
如何在招聘中考核.NET架构师
查看>>
zabbix3.2监控linux磁盘IO
查看>>
长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
查看>>
Semaphore
查看>>
k8s使用glusterfs实现动态持久化存储
查看>>
我们雇佣了一只大猴子...
查看>>
2017-12-24 手机编程环境初尝试-用AIDE开发Android应用
查看>>
pyqt5的下载进度条 实现模板
查看>>
Flink1.7.2 local WordCount源码分析
查看>>
盘点抖音源码中的广告变现方式
查看>>
星际荣耀获鼎晖投资A+轮投资,上半年将进行首枚入轨运载火箭
查看>>
Linux基础命令---显示路由表route
查看>>
金三银四,2019大厂Android高级工程师面试题整理
查看>>
SSL证书过期替换之踩坑总结
查看>>
全栈必备 Java 基础
查看>>
PostgreSQL 快速给指定表每个字段创建索引 - 1
查看>>