情景
一个老的程序需要多个数据库来运行集成测试,如果根据需要在本地运行集成测试我们需要:
- 一个或者多个postgresql实例
- 运行sql来初始化一个或者多个postgreql数据库📊
- 如果postgresql安装在本地,可能根据不同版本需要管理不同postgresql版本
使用docker compose 来将以上工作工程化
- 所有postgreql实例将通过docker compose管理
- 数据库版本管理
- 数据初始化
- 测试完成数据清理
创建一个专用文件夹
我们可以创建一个docker compose 数据库文件夹📁 -> db,这里只提供一个☝️参考,大家可以根据自己需要做一定的修改
db
- docker-compose.yml
- 01_user_db_init.sql
- 02_user_db_buffer_init.sql
- 01_product_db_init.sql
创建docker compose文件
version: "3.9"
services:
user-bdd:
container_name: user-bdd
image: postgres:9.6.3
environment:
- POSTGRES_USER=appUser
- POSTGRES_PASSWORD=[your pwd]
- POSTGRES_DB=APP_USER
healthcheck:
test: [ "CMD", "pg_isready","-q","-d", "APP_USER","-U","appUser" ]
interval: 10s
timeout: 45s
retries: 10
start_period: 5s
restart: always
volumes:
- ./01_user_db_init.sql:/docker-entrypoint-initdb.d/01_user_db_init.sql
- ./02_user_db_buffer_init.sql:/docker-entrypoint-initdb.d/02_user_db_buffer_init.sql
ports:
- "5688:5432"
product-bdd:
container_name: product-bdd
image: postgres:9.6.3
environment:
- POSTGRES_USER=appProduct
- POSTGRES_PASSWORD=[your pwd]
- POSTGRES_DB=APP_PRODUCT
healthcheck:
test: [ "CMD", "pg_isready","-q","-d", "APP_PRODUCT","-U","appProduct" ]
interval: 10s
timeout: 45s
retries: 10
start_period: 5s
restart: always
volumes:
- ./01_product_db_init.sql:/docker-entrypoint-initdb.d/01_product_db_init.sql
ports:
- "5689:5432"
这里很多变量都是写死的,可以使用一些变量来做优化
如何获取数据库📊实例 ?
docker-compose docker-compose.yml up
执行以上👆的命令,我们将自动获取两个运行了 postgres:9.6.3 实例
然后我们可以用maven命令行定义好数据库地址等配置信息来运行集成测试了