【发布时间】:2017-04-04 18:21:24
【问题描述】:
我无法使用 py.test 在 PyCharm 中调试。所有测试套件在“调试模式”下运行正常,但不会在断点处停止。
我还有 py.test 作为默认测试运行器。
也许这并不重要,但在我的 Django 服务器中调试工作正常。
有什么想法吗?
picture of enable_breakpoints_and_the_mode_of_pycharm_is_debug
参考资料:
【问题讨论】:
我无法使用 py.test 在 PyCharm 中调试。所有测试套件在“调试模式”下运行正常,但不会在断点处停止。
我还有 py.test 作为默认测试运行器。
也许这并不重要,但在我的 Django 服务器中调试工作正常。
有什么想法吗?
picture of enable_breakpoints_and_the_mode_of_pycharm_is_debug
参考资料:
【问题讨论】:
对于我的情况,我发现了问题所在:
如果pytest.ini中有--cov,那么pycharm中的断点将不起作用,删除pytest.ini中的所有--cov后,pycharm中的断点可以起作用。
原因:
“覆盖模块和 pycharm 的调试器使用相同的跟踪 api (sys.settrace) - 它们不能一起工作。” -- https://github.com/pytest-dev/pytest-cov/issues/131
参考资料:
【讨论】:
py.test test_dir --no-cov
pytest.ini 或类似的东西也值得四处寻找,这可能会导致覆盖率报告。
【讨论】:
pytest.ini 中的覆盖更可取。现在从命令行或在 CI 构建期间运行测试仍然会生成覆盖率报告。
pytest-cov to try this。但是,它对我不起作用。
TL;DR:在“构建、执行、部署”->“Python 调试器”中禁用“Gevent 兼容”标志。
似乎在某个时候我在 pycharm 中启用了“Gevent 兼容”调试器,从那时起 pytest-pycharm 停止工作。禁用它将使 pytest-pycharm 再次工作。我希望这能解决你们中的一些人的问题。
【讨论】:
我知道你说得对,但对我来说,实际上将默认测试运行器设置为 pytest 解决了这个问题。
在 PyCharm 中:Settings -> Python Integrated Tools -> Testing section -> Default test runner -> 从下拉菜单中选择 pytest -> 应用。它立即生效。
【讨论】:
我想补充一点,如果在 PyCharm 中启动单个测试函数(而不是整个测试文件),这些修复似乎不起作用。
我还没有找到在线解决方案来在调试单个测试函数而不是整个文件时激活断点,如果有人有解决方案,我会感兴趣。如果我自己找到它,我会尝试更新这篇文章。
【讨论】:
这里或其他地方提到的解决方案都不适合我。
我在不同文件夹中有同一个项目的多个副本。有些副本很好,有些则表现出以下行为:
调试器会忽略测试中的任何断点(无论这些断点是否作为单个函数、类、模块、批处理运行)
在这些测试调用的实际代码中设置的断点被命中
什么对我有用(3 个损坏的回购):
从您的测试子文件夹开始,删除您可以在项目中找到的每个 __pycache__ 文件夹。使用文件浏览器之类的文件浏览工具,因为 Pycharm 不会在项目视图中显示这些目录。
【讨论】:
对我来说,解决方案是在测试文件夹中创建空的 pytest.ini 文件。完成此操作后,我还可以启动特定功能的调试。
【讨论】: