テストスイートにpytestを使用しています。複雑なコンポーネント間テストでバグをキャッチしながら、コードの中央にimport ipdb; ipdb.set_trace()
を配置してデバッグできるようにします。
ただし、pytestはsys.stdin/sys.stdoutトラップをトラップするため、ipdbは失敗します。 pytestでテスト中にipdbを使用するにはどうすればよいですか。
障害の後にpdbやipdbにジャンプすることには興味がありませんが、コード内のどこかにブレークを配置し、障害が発生する前にそこでデバッグできるようにします。
Py.testが出力をキャプチャするため、エラーが発生します。
-s
オプションを使用してpy.testを実行する必要があります(キャプチャ出力をオフにします)。例えば:
py.test -s my_test.py
残念ながら、pytest-ipdbはサポートされなくなりました。
解決策は、pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb
を実行することです
Helpコマンドから:
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 )。
pytest-ipdb プラグインをインストールしてから使用します
pytest.set_trace()