web-dev-qa-db-ja.com

pytestテストの実行中にipdb.set_trace()を自由に実行する方法

テストスイートにpytestを使用しています。複雑なコンポーネント間テストでバグをキャッチしながら、コードの中央にimport ipdb; ipdb.set_trace()を配置してデバッグできるようにします。

ただし、pytestはsys.stdin/sys.stdoutトラップをトラップするため、ipdbは失敗します。 pytestでテスト中にipdbを使用するにはどうすればよいですか。

障害の後にpdbやipdbにジャンプすることには興味がありませんが、コード内のどこかにブレークを配置し、障害が発生する前にそこでデバッグできるようにします。

80
manu

Py.testが出力をキャプチャするため、エラーが発生します。

-sオプションを使用してpy.testを実行する必要があります(キャプチャ出力をオフにします)。例えば:

py.test -s my_test.py
127
petRUShka

残念ながら、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 )。

29
louis_guitton

pytest-ipdb プラグインをインストールしてから使用します

pytest.set_trace()
24
joar