1. 课程导论:什么是 Database Migration、为什么需要集成测试、冒烟检查的定义与目标

1.1 什么是 Database Migration

Database Migration(数据库迁移)是指对数据库结构或数据进行有计划、可追溯、可回滚的变更过程。在现代持续交付流水线中,数据库迁移通常以版本化脚本的形式存在,与应用代码一同纳入版本控制。

迁移类型 典型操作 风险等级
Schema 变更 新增/修改/删除表、列、索引、约束 高
数据迁移 数据清洗、格式转换、批量插入/更新 中
引用对象变更 视图、存储过程、函数、触发器的重建 中
权限与配置 用户、角色、参数、分区策略调整 低
关键认知: Database Migration 不是一次性活动,而是与应用程序版本迭代同步进行的持续过程。一次失败的迁移可能导致数据丢失、服务中断或回滚困难。
Database Migration 在交付流水线中的位置 应用代码 迁移脚本 版本控制 CI/CD 流水线:编译 → 单元测试 → 集成测试 → 部署 → 冒烟检查 目标数据库(生产/预发布)

1.2 为什么需要集成测试

数据库迁移的集成测试,是在真实或类真实的数据库环境中验证迁移脚本能否正确执行、数据是否完整、下游应用是否兼容的测试活动。它与单元测试的核心区别在于:

对比维度 单元测试 集成测试
测试范围 单个迁移脚本的语法与逻辑 多个迁移脚本的串联执行与依赖
数据库状态 内存数据库或 Mock 真实数据库实例(含存量数据)
验证目标 脚本不报错 数据完整性、外键约束、索引有效性、应用查询正确
回滚验证 通常不验证 必须验证回滚脚本可逆且数据无损
实践建议: 集成测试应覆盖“正向迁移 → 数据校验 → 回滚 → 再次正向”的完整闭环,确保迁移脚本在任何环境下都能安全执行。

1.3 冒烟检查的定义与目标

冒烟检查(Smoke Test)源自硬件测试领域——通电后如果设备冒烟,则立即停止测试。在数据库迁移场景中,冒烟检查是一组轻量、快速、高优先级的验证项,用于在迁移完成后第一时间判断数据库是否处于可用状态。

  • 连通性检查: 应用能否正常连接数据库?连接池是否初始化成功?
  • 核心表结构检查: 关键表是否存在?列名、数据类型、非空约束是否与预期一致?
  • 基础数据检查: 种子数据、配置表、字典表是否完整?
  • 关键查询检查: 最常用的 3~5 条查询能否正常返回结果?
  • 写入能力检查: 能否成功插入一条记录并提交事务?
冒烟检查在迁移验证中的位置 迁移脚本执行 冒烟检查 详细集成测试 通过? 回滚 继续后续测试
重要原则: 冒烟检查失败时,立即停止后续所有测试与部署流程,优先执行回滚。不要试图在失败状态下继续执行更耗时的详细集成测试——这既浪费资源,也可能污染测试数据。

1.4 三者关系总结

Database Migration 是变更动作,集成测试是验证手段,冒烟检查是验证流程中的第一道质量门禁。三者的协作关系可概括为:

  • Database Migration 定义了“我们要改变什么”;
  • 集成测试 定义了“我们如何全面验证变更的正确性”;
  • 冒烟检查 定义了“我们如何用最小成本快速判断变更是否基本可用”。