我无法使用 PyCharm 和 py.test 进行调试。在“调试模式”下,测试套件会正常运行,但它不会在断点处停止。
我也将 py.test 设置为默认的测试运行器。
也许这并不重要,但是我的 Django 服务器中的调试功能正常工作。
有什么想法吗?
参考文献:
我无法使用 PyCharm 和 py.test 进行调试。在“调试模式”下,测试套件会正常运行,但它不会在断点处停止。
我也将 py.test 设置为默认的测试运行器。
也许这并不重要,但是我的 Django 服务器中的调试功能正常工作。
有什么想法吗?
参考文献:
对于我的情况,我找到了问题所在:
如果pytest.ini
中有--cov
,那么PyCharm中的断点将不起作用。删除pytest.ini
中所有的--cov
后,PyCharm中的断点可以正常工作。
原因:
"覆盖率模块和PyCharm的调试器使用相同的跟踪API(sys.settrace)-它们不能一起工作。"--https://github.com/pytest-dev/pytest-cov/issues/131
参考文献:
pytest.ini
中禁用覆盖率更可取,正如被接受的答案所建议的那样。现在从命令行运行测试或在CI构建期间运行测试仍会生成覆盖率报告。 - roskakori这里和其他地方提到的解决方法都没用。
我有同一项目的多个副本在不同的文件夹中,一些副本正常,另一些出现以下情况:
调试器会忽略测试中的任何断点(无论是作为单个函数、类、模块或批次运行)
在这些测试调用的实际代码中设置的断点会被触发
对我有效的解决方法(4 个已损坏的代码库并计数):
从您无法进行调试的测试模块所在的目录开始,删除项目中__pycache__
文件夹中的内容。首先删除带有无法进行调试模块名称的.pyc
文件。如果这不起作用,请查找测试中使用的任何特定导入,然后定位并删除它们的__pycache__
/.pyc
。
(注意:使用像文件资源管理器这样的文件浏览工具,因为 Pycharm 在项目视图中不显示这些目录。)
如果您仍然没有运气,或者只是懒惰(就像我一样),可以删除存储库中所有__pycache__
文件夹。您可以通过命令行/终端实现这一点,只需导航到存储库文件夹,然后执行以下操作:
find . -name __pycache__ -type d -exec rm -rf {} \;
[linux, mac](参见如何删除具有特定名称的文件夹)FOR /d /r . %d IN ("__pycache__") DO @IF EXIST "%d" rd /s /q "%d"
[win](参见批处理命令以删除所有具有特定名称的子文件夹)编辑: 在最近的发现后对描述进行了详细说明,并添加了一个快速擦除提示。之后注意到@mcsj120已经在Antonin的帖子中提出了这个建议,所以向他致敬!
__pycache__
解决了问题。 - Tonatio简而言之:在“构建、执行、部署”->“Python调试器”中禁用“Gevent兼容”标志。
似乎我在某个时候启用了pycharm中的“Gevent兼容”调试器,自那以后pytest-pycharm就停止工作了。禁用它将使pytest-pycharm再次工作。希望这能解决一些人的问题。
我知道你的方法是正确的,但是对我而言将默认测试运行工具设置为pytest
就解决了这个问题。
在PyCharm中: Settings
-> Python Integrated Tools
-> Testing section
-> Default test runner
-> 从下拉菜单中选择pytest
-> 应用即可。然后它就可以立即运行。
我想补充一下,在PyCharm中只启动单个测试函数时,这些修复似乎不起作用。
我还没有在网上找到解决方案,以激活单个测试函数调试时的断点,如果有人有解决方案,我会很感兴趣。如果我自己找到了解决方法,我会尝试更新这篇文章。
find。 -name __pycache__ -type d - exec rm -rf {} \;
(Mac)删除了所有的__pycache__文件夹,之后就能够触发断点了。 - mcsj120对于我来说,解决方案就是在测试文件夹中创建一个空的pytest.ini文件。这样做后,我也可以为特定函数启动调试。
对我来说,当我安装了模块pytest-cov
之后就有效了。在此之前,Pycharm不会在断点处中断。
pip install pytest-cov
py.test test_dir --no-cov
- madzohanpytest.ini
或类似文件,可能会强制执行覆盖率报告。 - saaj