我正在为我的测试套件使用 pytest。在复杂的组件间测试中捕获错误时,我想将其放置import ipdb; ipdb.set_trace()
在我的代码中间以允许我对其进行调试。
但是,由于 pytest 捕获 sys.stdin/sys.stdout ipdb 失败。如何在使用 pytest 进行测试时使用 ipdb。
我对在失败后跳转到 pdb 或 ipdb 不感兴趣,而是在代码中的任何地方放置中断并能够在失败发生之前在那里对其进行调试。
引发错误是因为 pytest 默认捕获输出。
您可以使用选项运行 pytest -s
(关闭捕获输出)。例如:
py.test -s my_test.py
然后在my_test.py
:
import ipdb;
ipdb.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 docs)。
截至2019年 11 月,这是应该解决的问题:
pip install ipdb gnureadline ptpython
export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'
这就是我使用的
py.test tests/ --pdbcls=IPython.core.debugger:Pdb -s
你可能想pdbpp
试一试。与ipdb
使用pytest
. 在这里查看我的答案:https ://stackoverflow.com/a/69320311/2896799 。