PyCharm启动pytest时辅助方法内assert调试信息缺失问题
问题根因
该问题是PyCharm 2021.3版本内置pytest执行器的默认堆栈裁剪逻辑导致的:测试运行器默认会裁减掉非测试入口函数的断言堆栈信息,仅保留测试用例入口层的报错记录,因此辅助函数内的断言详情不会完整输出。
修复方案
你可以任选以下任意一种方案解决:
- 方案1:关闭PyCharm测试运行的堆栈裁剪开关
操作步骤:- 点击顶部菜单栏「运行」→「编辑配置」
- 找到对应Python测试的配置项,或者编辑「Python测试」分类下的默认配置模板
- 取消勾选「缩短堆栈跟踪」(英文版本对应为Trim stack trace)选项,保存配置后重新运行测试即可
- 方案2:在辅助函数内显式声明保留堆栈
在自定义校验的辅助函数开头添加__tracebackhide__ = False,强制pytest保留该函数的堆栈信息,修改后代码示例:class TestTest: def test_test(self): self.verify(1) def verify(self, parameter): __tracebackhide__ = False assert 1 == 2, "TEST" - 方案3:升级PyCharm版本
升级PyCharm到2022.1及以上版本,该版本已经修复了内置测试运行器默认裁剪辅助函数断言堆栈的bug。
修改后重新运行测试,即可输出和断言直接写在测试用例函数中完全一致的完整调试信息,包含自定义的报错信息、断言对比内容和完整堆栈跟踪。
内容的提问来源于stack exchange,提问作者Klaus Stadler
相关产品推荐
相关产品推荐

