Как выполнить ipdb.установите trace () по желанию во время выполнения тестов pytest


Я использую pytest для моего набора тестов. При ловле ошибок в сложном тесте между компонентами я хотел бы разместить import ipdb; ipdb.set_trace() в середине моего кода, чтобы позволить мне отладить его.

однако, так как pytest ловушки sys.stdin / sys.stdout ipdb завершается с ошибкой. Как я могу использовать ipdb при тестировании с pytest.

Я не заинтересован в переходе на pdb или ipdb после сбоя, но размещать разрывы в любом месте кода и иметь возможность отлаживать его там до возникновения сбоя.

3 64

3 ответа:

ошибка возникает из-за py.тест захвата вывода.

вы должны запустить py.тест с -s опция (отключить выход захвата). Например:

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, кажется, бросает erros, но Pdb нет (Ipython docs).