数据库测试要点
数据库测试验证数据模型、约束、事务与迁移脚本的正确性:包括 CRUD 逻辑、唯一约束、级联行为、迁移与回滚、并发一致性与数据质量。数据库往往被多个系统共享,SQL 层面的缺陷会绕过接口校验直接污染数据,事后清理代价极高。
基本信息
| 约束验证 | 主键、外键、唯一索引冲突时的行为 |
|---|---|
| 事务与隔离 | 并发更新、回滚后的数据状态 |
| 迁移测试 | 升级脚本与回滚脚本在新旧数据上都能执行 |
| 数据质量 | 脏数据与边界值在报表统计中的表现 |
| 环境手段 | 用容器快速起干净实例(Testcontainers 等) |
约束与回滚验证
约束与回滚验证
def test_unique_email(db):
db.insert_user(email="a@x.com")
# 唯一约束冲突应抛出明确异常
with pytest.raises(IntegrityError):
db.insert_user(email="a@x.com")
# 断言冲突没有留下残留数据
assert db.count_users() == 1典型使用场景
- 新表与新索引:约束、默认值、级联规则逐条验证。
- 迁移演练:在接近生产的数据量上执行升级与回滚。
- 事务边界:回滚后不留半截数据,重试不重复写入。
- 并发场景:两个事务同时更新同一行,验证锁与隔离语义。
- 报表口径:边界数据在聚合统计中的表现。
- 环境隔离:容器起库,用完即弃,不污染共享环境。
测试类型与预期
| 类型 | 动作 | 预期 |
|---|---|---|
| 约束 | 唯一与外键冲突 | 明确异常、数据不变 |
| 事务 | 中途失败回滚 | 无半截数据 |
| 迁移 | 升级与回滚 | 新旧数据均可执行 |
| 并发 | 同行动作交叉 | 符合隔离级别语义 |
迁移脚本的验证分两段:空库初始化与旧数据升级,两段都要跑回滚。
断言要落到 SQL 层:接口报错后数据是否残留,只有查库才能确认。
数据库测试可用容器快速起干净实例,避免污染共享环境。