【问题标题】:How to execute ipdb.set_trace() at will while running pytest tests如何在运行pytest测试时随意执行ipdb.set_trace()
【发布时间】:2013-04-08 00:34:34
【问题描述】:

我正在为我的测试套件使用 pytest。在复杂的组件间测试中捕获错误时,我想将import ipdb; ipdb.set_trace() 放在我的代码中间,以便我调试它。

但是,由于 pytest 捕获 sys.stdin/sys.stdout ipdb 失败。使用 pytest 进行测试时如何使用 ipdb。

我对在失败后跳转到 pdb 或 ipdb 不感兴趣,而是在代码中的任何位置放置中断并能够在失败发生之前在那里对其进行调试。

【问题讨论】:

    标签: python pytest


    【解决方案1】:

    您可能想试试pdbpp。与ipdbpytest 一起使用时,我使用它取得了更大的成功。在这里查看我的答案:https://stackoverflow.com/a/69320311/2896799

    【讨论】:

      【解决方案2】:

      由于pytest默认捕获输出而引发错误。

      您可以使用-s 选项运行 pytest(关闭捕获输出)。例如:

      py.test -s my_test.py
      

      然后在my_test.py:

      import ipdb;
      ipdb.set_trace()
      

      【讨论】:

      • 如果想在 Django 中执行此操作,请将 addopts = -s 添加到 pytest.ini 文件中。
      【解决方案3】:

      截至 2019-11 以下是应该解决的问题:

      pip install ipdb gnureadline ptpython
      
      export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'
      

      【讨论】:

      • 如果您安装prompt-toolkit 版本2.0.10 然后ipdb 将再次正常工作,因为最近将此软件包更新到3.0.0 导致它中断
      【解决方案4】:

      这是我用的

      py.test tests/ --pdbcls=IPython.core.debugger:Pdb -s

      【讨论】:

        【解决方案5】:

        不幸的是,pytest-ipdb 不再受支持。

        解决方案是运行 pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb

        来自帮助命令:

        pytest -h
          --pdb                 start the interactive Python debugger on errors.
          --pdbcls=modulename:classname
                                start a custom interactive Python debugger on errors.
                                For example:
                                --pdbcls=IPython.terminal.debugger:TerminalPdb
        

        不同之处在于 TerminalPdb 似乎会抛出错误,但 Pdb 不会(Ipython docs)。

        【讨论】:

        • TerminalPdb 再次工作,这是首选的解决方案,因为它可以让您完成标签。
        • 留意 ppdb,它有 ipython 质量自省
        猜你喜欢
        • 2018-01-25
        • 2020-06-14
        • 2020-04-25
        • 1970-01-01
        • 2018-06-01
        • 1970-01-01
        • 2023-02-11
        • 2013-04-14
        • 1970-01-01
        相关资源
        最近更新 更多