Как выполнить ipdb.установите trace () по желанию во время выполнения тестов pytest
Я использую pytest для моего набора тестов. При ловле ошибок в сложном тесте между компонентами я хотел бы разместить import ipdb; ipdb.set_trace()
в середине моего кода, чтобы позволить мне отладить его.
однако, так как pytest ловушки sys.stdin / sys.stdout ipdb завершается с ошибкой. Как я могу использовать ipdb при тестировании с pytest.
Я не заинтересован в переходе на pdb или ipdb после сбоя, но размещать разрывы в любом месте кода и иметь возможность отлаживать его там до возникновения сбоя.
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).