无法在pycharm中使用pytest进行调试

imzjd6km  于 2023-02-16  发布在  PyCharm
关注(0)|答案(9)|浏览(296)

我无法使用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

vyswwuz2

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

n9vozmp4

n9vozmp42#

根本问题是,如果默认启用了覆盖率(通常在pytest.ini上),调试就不起作用。
要仅在pycharm上禁用,只需在Run/Debug Configurations上的Additional Arguments上添加--no-cov
更新Templates -> Python tests -> pytest,以便每个新测试都获得此配置。
在此之后,删除当前的调试设置并重新调试。

Pycharm 2018.3.x(在2020.x中仍然有效)

o4tp2gmn

o4tp2gmn3#

TL;DR:在“构建、执行、部署”-〉“Python调试器”中禁用“Gevent兼容”标志。
似乎在某个时候我在pycharm中启用了“Gevent兼容”调试器,从那时起pytest-pycharm就停止工作了。禁用它将使pytest-pycharm再次工作。我希望这将为你们中的一些人解决这个问题。

ih99xse1

ih99xse14#

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

我在不同的文件夹中有同一项目的多个副本。一些副本正常,其他副本表现出以下行为:

  • 调试器将忽略测试中的任何断点(无论这些断点是否作为单个函数、类、模块或批处理运行)
  • 命中了这些测试调用的实际代码中设置的断点
    哪些措施对我有效(4次中断的回购协议和计数):

删除项目中__pycache__文件夹的内容,从不可调试的测试模块所在的目录开始。首先删除带有不可调试模块名称的.pyc文件。如果这没有帮助,请标识测试中使用的任何自己的导入,找到并删除它们的__pycache__/.pyc。(注意:使用文件浏览器之类的文件浏览工具,因为Pycharm不会在项目视图中显示这些目录。)
如果你还是不走运或者只是懒惰(像我一样),清除repo中所有的__pycache__文件夹。你可以通过命令行/终端完成这一操作,只需导航到repo文件夹,然后:

编辑:在最近的发现之后做了一些详细的描述,添加了一个快速擦除的提示。之后注意到@mcsj120已经在安东宁的帖子中提出了这个建议,所以称赞他!

jogvjijk

jogvjijk5#

我知道你是对的,但对我来说,实际上将默认测试运行器设置为pytest解决了这个问题。Settings-〉Python Integrated Tools-〉Testing section-〉Default test runner-〉从下拉菜单中选择pytest-〉应用。

qhhrdooz

qhhrdooz6#

我想补充一点,这些修复在PyCharm中启动单个测试函数(而不是整个测试文件)的情况下似乎不起作用。
我还没有在网上找到一个在调试单个测试函数而不是整个文件时激活断点的解决方案,如果有人有解决方案,我会很感兴趣。如果我自己找到了,我会尝试更新这篇文章。

gudnpqoy

gudnpqoy7#

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

jchrr9hc

jchrr9hc8#

我已经尝试了以上所有的,没有工作。
意识到我使用的是“模块名称”目标,而不是“脚本路径”目标,这在上面的一个答案的屏幕截图中显示。
我更改为脚本路径和指定目标-这很重要,因为没有它测试也能工作,但断点不能。
另外,由于某种原因,现有断点不起作用,但新断点起作用了(所以我只是刷新了现有断点,它们按预期工作)

r7knjye2

r7knjye29#

对我来说,当我安装模块pytest-cov时,它工作。之前Pycharm在断点上没有中断。

pip install pytest-cov

相关问题