运行含assertEqual的测试套件报错:HtmlTestResult无_count_relevant_tb_levels属性
问题解决:'HtmlTestResult' object has no attribute '_count_relevant_tb_levels'
问题原因
这个错误并非assertEqual本身导致,而是HtmlTestRunner版本与Python unittest版本不兼容:
- Python 3.11及以上的unittest框架新增了
_count_relevant_tb_levels属性,用于处理测试失败时的回溯信息层级 - 旧版本的HtmlTestRunner未实现该属性,当测试用例因断言失败(比如你的
assertEqual不通过)触发错误回溯时,HtmlTestResult对象找不到这个属性,就会抛出异常
解决方案
方案1:升级到兼容的测试报告库
原有的HtmlTestRunner包可能已停止维护,建议使用维护活跃的html-test-runner包:
- 卸载旧包(如果已安装):
pip uninstall HtmlTestRunner
- 安装新版:
pip install html-test-runner
- 修改代码中的导入和调用:
from html_test_runner import HTMLTestRunner # 替换原来的testRunner参数 if __name__ == '__main__': unittest.main(testRunner=HTMLTestRunner(output='Test result: '))
方案2:手动修改HtmlTestRunner源码(临时应急)
如果暂时无法更换库,找到HtmlTestRunner的安装目录,修改HtmlTestResult类,添加以下方法:
def _count_relevant_tb_levels(self, tb): return self._is_relevant_tb_level(tb)
方案3:降级Python版本
将Python版本降到3.10及以下,此时unittest还没有引入_count_relevant_tb_levels属性,旧版HtmlTestRunner可以正常工作(不推荐长期使用)。
验证
修改后重新运行测试套件,即使assertEqual断言失败,也能正常生成测试报告,不会再抛出该属性错误。
内容的提问来源于stack exchange,提问作者Claudio Rodriguez
相关产品推荐
相关产品推荐

