docker compose将maven测试postgresql数据库工程化

116 阅读1分钟

情景

一个老的程序需要多个数据库来运行集成测试,如果根据需要在本地运行集成测试我们需要:

  • 一个或者多个postgresql实例
  • 运行sql来初始化一个或者多个postgreql数据库📊
  • 如果postgresql安装在本地,可能根据不同版本需要管理不同postgresql版本

Capture d’écran 2023-07-25 à 11.51.23.png

使用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命令行定义好数据库地址等配置信息来运行集成测试了