Использование 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
если этот адаптер установлен.