测试数据库的方案

说明为什么测试应使用独立数据库,并对比独立测试库、共享开发库和事务回滚三类方案。

#type / howto #status / growing #tech / dev / test #resource / database

[!info] related notes

测试数据库的方案

目标

给自动化测试准备一个可重复、可清理、不会污染开发数据的数据库环境。

前置条件

  • 你有需要落到真实数据库的测试
  • 你愿意区分开发环境和测试环境

步骤

为什么不要直接复用开发数据库

直接复用开发数据库通常会带来四类问题:

  • 测试前清表会删除你正在调试的数据
  • 唯一键和外键容易与手工数据冲突
  • 测试结果依赖现有数据,不可重复
  • 某些删除和回滚测试会直接破坏开发环境

常见方案对比

方案优点缺点适用场景
独立测试数据库隔离性最好,可重复需要单独准备环境推荐默认方案
共享开发数据库配置最省事污染数据、冲突多、风险高不推荐
事务回滚单次测试清理快难覆盖事务逻辑,不适合多进程并发少量特殊场景

推荐默认方案

优先使用独立测试数据库:

  • 端口独立
  • 数据库名独立
  • 数据卷独立
  • 每次测试前清理数据

如果要进一步提速,可以在 Docker 里为测试数据库使用临时数据卷或内存文件系统。

验证

  • 测试运行前后不影响开发数据库
  • 测试可重复执行,结果稳定
  • 清理数据库的脚本只连接测试库

常见问题

  • “只换数据库名”不一定够,很多错误都来自环境变量误连到开发库
  • 使用事务回滚时,如果业务本身也有事务,测试隔离往往会变复杂
  • 跑集成测试时,验证“真的在用测试数据库”比写清理脚本本身更重要
创建于 2025/1/1 更新于 2026/5/27