我无法使用py.test在PyCharm中debug。所有测试套件在"Debug mode"(调试模式)下运行正常,但不会在断点处停止。
我还将py. test作为默认的测试运行器。
也许这并不重要,但是调试在我的Django服务器上工作正常。
有什么想法吗?
picture of enable_breakpoints_and_the_mode_of_pycharm_is_debug
参考文献:
pycharm-enabling-disabling-and-removing-breakpoints
Run/Debug Configuration: py.test
9条答案
按热度按时间vyswwuz21#
对于我的情况,我发现问题是什么:
如果
pytest.ini
中有--cov
,那么pycharm中的断点就不起作用,删除pytest.ini
中所有的--cov
后,pycharm中的断点才起作用。理由:
"coverage模块和pycharm的调试器使用相同的跟踪API(sys.settrace)-它们不能一起工作。"--https://github.com/pytest-dev/pytest-cov/issues/131
参考文献:
How to debug py.test in PyCharm when coverage is enabled
n9vozmp42#
根本问题是,如果默认启用了覆盖率(通常在pytest.ini上),调试就不起作用。
要仅在pycharm上禁用,只需在
Run/Debug Configurations
上的Additional Arguments
上添加--no-cov
。更新
Templates -> Python tests -> pytest
,以便每个新测试都获得此配置。在此之后,删除当前的调试设置并重新调试。
Pycharm 2018.3.x
(在2020.x中仍然有效)o4tp2gmn3#
TL;DR:在“构建、执行、部署”-〉“Python调试器”中禁用“Gevent兼容”标志。
似乎在某个时候我在pycharm中启用了“Gevent兼容”调试器,从那时起pytest-pycharm就停止工作了。禁用它将使pytest-pycharm再次工作。我希望这将为你们中的一些人解决这个问题。
ih99xse14#
这里或其他地方提到的解决方案都不适合我。
我在不同的文件夹中有同一项目的多个副本。一些副本正常,其他副本表现出以下行为:
哪些措施对我有效(4次中断的回购协议和计数):
删除项目中
__pycache__
文件夹的内容,从不可调试的测试模块所在的目录开始。首先删除带有不可调试模块名称的.pyc
文件。如果这没有帮助,请标识测试中使用的任何自己的导入,找到并删除它们的__pycache__
/.pyc
。(注意:使用文件浏览器之类的文件浏览工具,因为Pycharm不会在项目视图中显示这些目录。)如果你还是不走运或者只是懒惰(像我一样),清除repo中所有的
__pycache__
文件夹。你可以通过命令行/终端完成这一操作,只需导航到repo文件夹,然后:find . -name __pycache__ -type d -exec rm -rf {} \;
[Linux、Mac](请参阅How to remove folders with a certain name)FOR /d /r . %d IN ("__pycache__") DO @IF EXIST "%d" rd /s /q "%d"
[赢](请参见Batch command to delete all subfolders with a specific name)编辑:在最近的发现之后做了一些详细的描述,添加了一个快速擦除的提示。之后注意到@mcsj120已经在安东宁的帖子中提出了这个建议,所以称赞他!
jogvjijk5#
我知道你是对的,但对我来说,实际上将默认测试运行器设置为
pytest
解决了这个问题。Settings
-〉Python Integrated Tools
-〉Testing section
-〉Default test runner
-〉从下拉菜单中选择pytest
-〉应用。qhhrdooz6#
我想补充一点,这些修复在PyCharm中启动单个测试函数(而不是整个测试文件)的情况下似乎不起作用。
我还没有在网上找到一个在调试单个测试函数而不是整个文件时激活断点的解决方案,如果有人有解决方案,我会很感兴趣。如果我自己找到了,我会尝试更新这篇文章。
gudnpqoy7#
对我来说,解决方案是在test文件夹中创建空的pytest.ini文件,这样做之后,我还可以启动特定函数的debug。
jchrr9hc8#
我已经尝试了以上所有的,没有工作。
意识到我使用的是“模块名称”目标,而不是“脚本路径”目标,这在上面的一个答案的屏幕截图中显示。
我更改为脚本路径和指定目标-这很重要,因为没有它测试也能工作,但断点不能。
另外,由于某种原因,现有断点不起作用,但新断点起作用了(所以我只是刷新了现有断点,它们按预期工作)
r7knjye29#
对我来说,当我安装模块
pytest-cov
时,它工作。之前Pycharm在断点上没有中断。