如何在运行pytesttesting时随意执行ipdb.set_trace()

我正在使用pytest作为我的testing套件。 在捕获复杂的组件间testing中的错误时,我想放置import ipdb; ipdb.set_trace() import ipdb; ipdb.set_trace()在我的代码中,让我debugging它。

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

我没有兴趣在故障发生后跳转到pdb或ipdb,而是在代码的任何地方放置中断,并且能够在发生故障之前在那里debugging它。

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

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

 py.test -s my_test.py 

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

 pytest.set_trace() 

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