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


96

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

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

我对出现故障后跳转到pdb或ipdb并不感兴趣,但可以在代码中的任何位置放置中断,并能够在发生故障之前在那里进行调试。

Answers:


153

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

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

py.test -s my_test.py

10
如果要在Django中执行此操作,请添加addopts = -spytest.ini文件中。
拉胡尔·古普塔

39

不幸的是,不再支持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)。


1
TerminalPdb正在重新工作,并且首选的解决方案可以使您完成制表符。
Uwe L. Korn,

寻找ppdb,它得到了ipython质量的自省
msudder

2

这就是我用的

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


0

2019-11开始,以下是应解决的问题:

pip install ipdb gnureadline ptpython

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

1
如果您安装了该prompt-toolkit 版本,2.0.10则ipdb将再次正常运行,因为它由于此软件包的最新更新至3.0.0而中断
Pawel Barcik,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.