如何让Python Unittest测试失败时不输出整个测试用例代码?
问题
在使用Python的unittest做单元测试时,有些测试用例会因为测试专属输入或冗长逻辑变得很长。测试失败时,unittest会输出从测试用例开头到断言失败处的全部代码,导致输出内容冗余,滚动查看特别麻烦。有没有办法让unittest只显示断言失败的核心信息,不输出整个测试用例?
示例测试代码
def testArbitraryStringTest(self): arbStrings = [ 'abcdef', '1a23', '12l;kf3j', 'va;kljda', 'roenwfas', 'asdjvoisdp', 'v9jw3oawe', 'a;lvnpaos', 'vaoispvdjdas', 'avnoasdpf', 'voasdivpas', 'asvnoiasdv;', '1a23', '12l;kf3j', 'va;kljda', 'roenwfas', 'asdjvoisdp', 'v9jw3oawe', 'a;lvnpaos', 'vaoispvdjdas', 'avnoasdpf', 'voasdivpas', 'asvnoiasdv;', '1a23', '12l;kf3j', 'va;kljda', 'roenwfas', 'asdjvoisdp', 'v9jw3oawe', 'a;lvnpaos', 'vaoispvdjdas', 'avnoasdpf', 'voasdivpas', 'asvnoiasdv;', '1a23', '12l;kf3j', 'va;kljda', 'roenwfas', 'asdjvoisdp', 'v9jw3oawe', 'a;lvnpaos', 'vaoispvdjdas', 'avnoasdpf', 'voasdivpas', 'as', ] for arbStr in arbStrings: self.assertGreater(len(arbStr), 3)
期望的精简失败输出
============================= test session starts ============================== collecting ... collected 1 item SemanticTest.py::SemanticTest::testArbitraryStringTest FAILED [100%] E AssertionError: 2 not greater than 3 SemanticTest.py:65: AssertionError ============================== 1 failed in 0.34s ===============================
解决方案
方法1:命令行参数直接控制(推荐)
用python -m unittest运行测试时,添加--tb=short参数,就能只显示断言失败的核心信息,不会输出整个测试用例代码:
python -m unittest --tb=short your_test_file.py
如果想要更极致的精简,每条错误只显示一行,可以用--tb=line参数:
python -m unittest --tb=line your_test_file.py
方法2:自定义测试运行器固化行为
如果需要在代码层面固定精简输出的规则,可以自定义TextTestRunner,关闭测试用例描述并配合traceback参数:
import unittest class QuietTestRunner(unittest.TextTestRunner): def run(self, test): self.descriptions = False # 关闭测试用例的详细描述 return super().run(test) if __name__ == '__main__': test_suite = unittest.defaultTestLoader.discover('.') runner = QuietTestRunner(verbosity=1) runner.run(test_suite)
运行这个脚本时,再加上--tb=short参数,就能完全符合你的输出需求。
方法3:改用pytest(可选)
如果可以切换测试框架,pytest默认的失败输出就非常精简,只会展示断言失败的关键信息和对应行号,无需额外配置。运行测试只需:
pytest your_test_file.py
内容的提问来源于stack exchange,提问作者blake
相关产品推荐
相关产品推荐

