Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

py.test -s my_test.py

Ответ 2

Установите плагин pytest-ipdb, а затем используйте

pytest.set_trace()

Ответ 3

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).