无法用 Pytest 调试魅惑

我不能使用 py.test 在 PyCharm 中使用 调试。所有测试套件在“调试模式”下运行正常,但它不会在断点处停止。

Debug Mode

我还将 py.test 作为默认的测试运行程序。

也许这并不重要,但是调试在我的 Django 服务器中可以正常工作。

有什么想法吗?

Configuration 启用断点的图片和 Pycharm 的 _ mode _ is _ < strong > debug

参考文献:

Pycharme-启用-禁用和删除-断点

运行/调试配置: py.test

29618 次浏览

就我的情况而言,我发现了问题所在:

如果 pytest.ini中存在 --cov,那么 Pycharm 中的断点就不能工作,在删除 pytest.ini中的所有 --cov之后,Pycharm 中的断点就可以工作了。

理由:

“覆盖模块和 pycharm 的调试器使用相同的跟踪 api (sys.settrace)——它们不能一起工作。”—— https://github.com/pytest-dev/pytest-cov/issues/131

参考文献:

当覆盖率被启用时,如何在 PyCharm 中调试 py.test

DR: 在“构建、执行、部署”-> “ Python 调试器”中禁用“ Gevent 兼容”标志。

似乎在某个时候,我在 pycharm 中启用了“ Gevent 兼容”调试器,从那时起,pytest-pycharm 就停止工作了。解除它会让魔法再次起作用。我希望这将解决你们中的一些人的问题。

根本问题是,如果默认情况下启用了覆盖率(通常在 pytest.ini 上) ,则调试无法工作。

要禁用仅仅在 pycharm,只需在 Run/Debug Configurations上的 Additional Arguments上添加 --no-cov
更新 Templates -> Python tests -> pytest,这样每个新的测试都会得到这个配置。
此后,删除当前的调试设置并重新调试它。

enter image description here

Pycharm 2018.3.x(仍然在2020.x 中工作)

我想补充的是,这些修复在 PyCharm 中启动单个测试函数(而不是整个测试文件)的情况下似乎不起作用。

我还没有找到一个解决方案在线激活断点时调试一个单一的测试函数,而不是整个文件,如果有人有一个解决方案,我会感兴趣。如果我自己找到了,我会尝试更新这篇文章。

我知道你是对的,但是对我来说,实际上将默认测试运行程序设置为 pytest解决了这个问题。 在 PyCharm 中: Settings-> Python Integrated Tools-> Testing section-> Default test runner-> 从下拉菜单中选择 pytest-> Apply。它马上就起作用了。

对我来说,解决方案是在测试文件夹中创建空的 pytest.ini 文件。这样做之后,我还可以启动特定函数的调试。

这里或其他地方提到的解决方案都不适合我。

我在不同的文件夹中有同一个项目的多个副本,有些副本很好,有些则表现出以下行为:

  • 调试器将忽略测试中的任何断点(不管这些断点是否作为单个函数、类、模块、批处理运行)

  • 命中了由这些测试调用的实际代码中设置的断点

什么对我起作用了(4个破碎的回购和计数) :

从不可调试测试模块所在的目录开始,删除项目中 __pycache__文件夹的内容。首先删除带有不可调试模块名称的 .pyc文件。如果这没有帮助,那么确定测试中使用的任何自己的导入,找到并删除它们的 __pycache__/.pyc。 (注意: 使用像 File Explorer 这样的文件浏览工具,因为 Pycharm 不会在项目视图中显示这些目录。)

如果你仍然不走运或只是懒惰(像我一样) ,擦除所有的 __pycache__文件夹,你有在你的回购。你可以通过命令行/终端进行操作,只需导航到回购文件夹,然后:

编辑: 在最近的调查结果之后做了一些详细的描述,加了一个快速擦拭的提示。后来注意到@mcsj120已经在安东尼的帖子中提出了这个建议,所以向他致敬!