You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyCharm 2018运行单元测试出现双重回溯的原因咨询

PyCharm 2018运行unittest出现双重回溯的原因及解决办法

有用户遇到了这样的问题:在site_tests.py中编写了如下简单的unittest测试用例:

import unittest
class SiteTests(unittest.TestCase):
    def test(self):
        self.assertEqual('a', 'b')
if __name__ == '__main__':
    unittest.main()

使用PyCharm 2018默认配置运行该测试时,控制台输出两个回溯信息;但直接用Python命令python site_tests.py运行时,仅显示正常的单个回溯。另外用_jb_unittest_runner.py在控制台运行时,还出现了两个测试套件的输出。想知道PyCharm运行器中为何会出现第二个回溯?

这是PyCharm早期版本里挺常见的unittest运行器封装问题,我来拆解背后的原因:

核心原因:PyCharm自带测试运行器的二次封装逻辑

PyCharm的_jb_unittest_runner.py并不是直接调用Python标准库的unittest运行器,而是在它基础上做了一层封装——目的是为了在IDE里实现更丰富的测试监控功能,比如实时显示测试进度、在编辑器中标记测试结果、统计测试通过率等。

这个封装逻辑直接导致了你遇到的两个现象:

  • 双重回溯:运行器在执行测试时,会触发两次异常捕获流程:一次是标准unittest运行器本身输出的异常回溯,另一次是PyCharm的封装层为了把异常信息同步到IDE界面,再次捕获并输出了一遍回溯内容。所以你会看到控制台里出现两个完全相同的回溯。
  • 两个测试套件:为了收集完整的测试元数据,PyCharm的运行器会额外执行一次测试用例扫描,或者在内部创建了辅助测试套件,导致控制台输出中显示有两个测试套件被加载。

不同运行方式的差异对比

  • 直接用python site_tests.py运行时,使用的是Python标准库的原生unittest运行器,整个测试流程只执行一次,异常仅被抛出并输出一次,因此只会看到单个回溯。
  • 而通过_jb_unittest_runner.py运行时,因为封装层的二次处理逻辑,就出现了重复的回溯和套件信息。

解决办法:切换到标准unittest运行器

如果你觉得双重回溯干扰问题排查,可以在PyCharm中调整测试运行配置:

  • 点击顶部工具栏的运行配置下拉框,选择「Edit Configurations...」
  • 在弹出的窗口中找到对应的unittest测试配置项
  • 切换到「Configuration」标签页,找到「Test runner」选项,将默认的「PyCharm」改为「Unittest」
  • 保存配置后重新运行测试,就只会看到标准的单个回溯输出了

内容的提问来源于stack exchange,提问作者pbaranski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:19:19