数据库集成、事务与数据正确性
接口测试、单元测试与自动化测试#Python全栈#第十七阶段#接口测试、单元测试与自动化测试#数据库集成、事务与数据正确性约 917 字 · 3 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
为什么项目需要独立的测试数据库与明确的连接配置?
追问 怎样在开始测试前确认连接目标和准备策略?删除、清表和迁移操作怎样限定在当前测试资源,避免影响其他运行?
使用 SQLite 替代生产 MySQL 测试有哪些局限?
追问 字段类型、约束、排序、SQL 方言和并发行为怎样可能不同?哪些轻量测试可以替代,哪些必须在相同数据库类型上复核?
测试中的建表初始化与执行真实迁移各验证什么?
追问 直接根据模型建表为什么可能漏掉迁移缺陷?空库升级与已有旧数据升级怎样分别测试,并检查最终结构和数据?
按测试回滚事务,是否一定能清理被测代码的所有修改?
追问 应用自行 commit、新建连接或后台进程写入时会怎样?外层事务、SAVEPOINT 与连接绑定怎样核对,哪些情况需要独立数据库或显式清理?
Django TestCase 与 TransactionTestCase 的事务测试用途有什么区别?
追问 需要观察真实提交、锁或提交后回调时怎样选择?为什么常规隔离方式可能影响 on_commit 回调是否执行,怎样按文档验证?
怎样验证唯一约束、外键和非空约束确实生效?
追问 为什么只测试接口参数校验还不够?怎样从独立会话或直接持久化路径构造冲突,并验证失败后的会话与数据状态?
怎样测试业务操作中途失败后的事务回滚?
追问 更新成绩与写入统计之间注入异常,应检查哪些记录?失败后再次执行怎样验证恢复,避免只看异常类型而不检查数据?
怎样验证持久化结果,而不是仅验证 ORM 内存对象被修改?
追问 flush、commit 和会话缓存有什么不同?什么时候应重新查询、刷新或使用独立连接,如何避免读取尚未提交的数据造成假通过?
怎样稳定构造重复提交、并发扣减或更新覆盖的测试?
追问 独立事务、同步屏障和明确时序怎样配合?为什么两个协程共用一个会话通常不能代表真实并发,哪些数据库隔离条件要注明?
数据库相关测试变慢或偶发失败时,怎样排查?
追问 数据污染、锁等待、连接泄漏、迁移成本和缺少索引如何区分?怎样先缩小测试范围,再决定是否共享资源或增加并行度?
事务核对资料: SQLAlchemy:Transactions and Connection Management、Django:Testing tools。