【问题标题】:Unable to debug in pycharm with pytest无法在 pycharm 中使用 pytest 进行调试
【发布时间】:2017-04-04 18:21:24
【问题描述】:

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

我还有 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

【问题讨论】:

    标签: pycharm pytest


    【解决方案1】:

    对于我的情况,我发现了问题所在:

    如果pytest.ini中有--cov,那么pycharm中的断点将不起作用,删除pytest.ini中的所有--cov后,pycharm中的断点可以起作用。

    原因:

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

    参考资料:

    How to debug py.test in PyCharm when coverage is enabled

    【讨论】:

    • py.test test_dir --no-cov
    • pytest.ini 文件在哪里?
    • @silverest 自己创建,可以看docs.pytest.org/en/latest/customize.html#finding-the-rootdir。
    • 这也解决了 PyDev 中的相同问题(因为两者都使用 pydevd)。 pytest.ini 或类似的东西也值得四处寻找,这可能会导致覆盖率报告。
    • @madzohan 和 joaoricardo000 答案我认为是最好的。因为这可以作为附加参数应用在调试配置中,而无需更改可能在版本控制中的 pytest.ini 文件。
    【解决方案2】:

    如果您默认启用覆盖(通常在 pytest.ini 上),则根本问题是调试不起作用。

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

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

    【讨论】:

    • 谢谢,为我工作。这比在接受的答案中建议停用pytest.ini 中的覆盖更可取。现在从命令行或在 CI 构建期间运行测试仍然会生成覆盖率报告。
    • 问题已解决。但是作为 PyCharm 的新手,我花了很长时间才知道如何进入运行/调试配置(导航栏被隐藏了,我不知道......)jetbrains.com/help/pycharm/…
    • 我必须install pytest-cov to try this。但是,它对我不起作用。
    • 在 Pycharm Pro 2020.2 中,它位于“文件”菜单的“新项目设置”下的“新项目的运行配置模板”中,或者您可以在运行菜单中按“添加配置”时访问它.
    • 我在 kedro 项目的 pyproject.toml 文件中添加了 --no-cov,它解决了我的问题。谢谢!
    【解决方案3】:

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

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

    【讨论】:

    • 我有 PyCharm 2018.2.1,该选项默认已禁用
    • 我相信我启用它是为了尝试解决以前版本中的警告或错误,并且在升级时几乎没有任何断点可以工作(只有我的 main.py 中的断点)。取消选中它恢复了预期的操作。
    • 非常感谢 Alessio,这解决了我的问题。是的,这个标志在默认情况下确实是禁用的,但我需要启用它来使用 PyTorch (stackoverflow.com/a/47801392/1081551) 调试大型深度学习模型。因此,了解何时启用/禁用它非常关键
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 我遇到了同样的问题,单个文本夹具不会在断点处停止,并通过使用命令 @ 删除所有 pycache 文件来使用 @mrbattle 的解决方案987654321@ (Mac) 之后,我就可以打断点了。
      【解决方案6】:

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

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

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

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

      什么对我有用(3 个损坏的回购):

      从您的测试子文件夹开始,删除您可以在项目中找到的每个 __pycache__ 文件夹。使用文件浏览器之类的文件浏览工具,因为 Pycharm 不会在项目视图中显示这些目录。

      【讨论】:

        【解决方案7】:

        对我来说,解决方案是在测试文件夹中创建空的 pytest.ini 文件。完成此操作后,我还可以启动特定功能的调试。

        【讨论】:

          猜你喜欢
          • 2020-04-25
          • 1970-01-01
          • 1970-01-01
          • 2018-10-21
          • 2013-08-25
          • 2018-05-15
          • 1970-01-01
          • 2013-10-20
          • 2015-03-13
          相关资源
          最近更新 更多