如何在运行pytest测试时随意执行ipdb.set_trace()

时间:2013-04-15 19:05:35

标签: pytest

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

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

我对失败后跳转到pdb或ipdb不感兴趣,但是在代码中的任何地方放置中断并能够在发生故障之前在那里调试它。

5 个答案:

答案 0 :(得分:117)

由于py.test捕获输出而引发错误。

您应该使用-s选项运行py.test(关闭捕获输出)。例如:

py.test -s my_test.py

答案 1 :(得分:25)

遗憾的是,

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)。

答案 2 :(得分:24)

安装pytest-ipdb插件,然后使用

pytest.set_trace()

答案 3 :(得分:0)

这就是我用的

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

答案 4 :(得分:0)

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

pip install ipdb gnureadline ptpython

export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'