Я использую pytest для своего набора тестов. При обнаружении ошибок в сложном межкомпонентном тесте я хотел бы разместить их import ipdb; ipdb.set_trace()
в середине своего кода, чтобы я мог его отлаживать.
Однако, поскольку pytest перехватывает sys.stdin / sys.stdout, ipdb не работает. Как я могу использовать ipdb при тестировании с помощью pytest.
Меня не интересует переход к pdb или ipdb после сбоя, но мне нужно размещать разрывы в любом месте кода и иметь возможность отлаживать его там до того, как произойдет сбой.
addopts = -s
вpytest.ini
файл.pytest-ipdb, к сожалению, больше не поддерживается.
Решение - запустить
pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb
Из команды помощи:
Разница лишь в том, что кажется, что TerminalPdb выдает ошибки, а Pdb - нет ( документы Ipython ).
источник
TerminalPdb
снова работает и является предпочтительным решением, поскольку оно даст вам завершение вкладки.Это то, что я использую
py.test tests/ --pdbcls=IPython.core.debugger:Pdb -s
источник
По состоянию на 2019-11 год вот что должно исправить:
источник
prompt-toolkit
версию,2.0.10
то ipdb снова будет работать нормально, потому что он ломается из-за недавнего обновления этого пакета до 3.0.0