Использование Python pudb отладчика с pytest

До того, как моя тестовая библиотека выбора была unittest. Он работал с моим любимым отладчиком - Pudb. Не Pdb!!!

Чтобы использовать Pudb с unittest, я вставляю import pudb;pudb.set_trace() между строками кода. Затем я выполнил python -m unittest my_file_test, где my_file_test является модульным представлением файла my_file_test.py.

Просто использование nosetests my_file_test.py не будет работать - AttributeError: StringIO instance has no attribute 'fileno' будет выбрано.

С py.test не работает:
py.test my_file_test.py
ни
python -m pytest my_file_test.py

оба бросят ValueError: redirected Stdin is pseudofile, has no fileno()

Любые идеи о том, как использовать Pudb с py.test

Ответ 1

Просто добавив флаг -s, pytest не заменит stdin и stdout, и отладка станет доступной, т.е. pytest -s my_file_test.py сделает pytest -s my_file_test.py дело.

В документации, предоставленной ambi, также сказано, что ранее использование -s явно требовалось и для обычного pdb, теперь флаг -s неявно используется с флагом --pdb.

Однако pytest неявно поддерживает pUdb, поэтому настройка -s необходима.

Ответ 2

Обновленный ответ заключается в том, что теперь имеется библиотека адаптеров для предоставления --pudb трассировки --pudb аналогичной --pdb. -s более общая опция -s остается верным решением для ручных точек останова из любого отладчика.

Для использования pip install pytest-pudb затем запустите Pytest через py.test --pudb. Кроме того, import pudb; pudb.set_trace() import pudb; pudb.set_trace() поддерживается без необходимости использования -s или --capture=no если этот адаптер установлен.