Django是否存在可作为子测试运行的assertNumQueries断言方法?
非中断式数据库查询数量校验实现
核心需求
- 测试过程中统计指定代码段生成的数据库查询数量
- 查询数量校验失败时,不终止整个测试,可继续执行业务功能校验逻辑
原生方法的问题
Django测试中常用的assertNumQueries方法,只要实际查询数和预期值不一致,就会直接抛出断言错误终止测试,非常影响调试效率:查询数量变动的原因通常不够直观,先确认业务功能本身是否正常,能帮我们快速缩小问题排查范围。
自定义实现代码
def assertNumQueriesSubTest(func, expected_number): with self.countNumQueries as query_count: # 优先执行业务代码,完成所有业务侧执行逻辑 func() # 将查询数校验放在subTest上下文中,失败仅标记子测试异常,不会中断主测试流程 with self.subTest('查询数量校验'): self.assertEqual(query_count, expected_number)
逻辑说明
- 先执行目标业务函数,所有业务功能相关的断言可以放在
func内部,或者放在该自定义方法调用之后,都不会被查询数校验的失败阻断 - 子测试的失败结果会单独展示在最终测试报告中,不影响其他测试步骤的结果判定
内容的提问来源于stack exchange,提问作者nemesifier
相关产品推荐
相关产品推荐

