[pytest] pytest 테스트를 실행하는 동안 ipdb.set_trace ()를 마음대로 실행하는 방법

내 테스트 스위트에 pytest를 사용하고 있습니다. 복잡한 구성 요소 간 테스트에서 버그를 포착하는 동안 import ipdb; ipdb.set_trace()코드 중간에 배치 하여 디버그 할 수 있도록하고 싶습니다.

그러나 pytest가 sys.stdin / sys.stdout ipdb를 트랩하기 때문에 실패합니다. pytest로 테스트하는 동안 ipdb를 어떻게 사용할 수 있습니까?

나는 실패 후 pdb 또는 ipdb로 점프하는 데 관심이 없지만 코드의 아무 곳에 나 중단을 배치하고 실패가 발생하기 전에 디버그 할 수 있습니다.



답변

py.test 캡처 출력으로 인해 오류가 발생합니다.

-s옵션을 사용 하여 py.test를 실행해야합니다 (캡처 출력 해제). 예를 들면 :

py.test -s my_test.py


답변

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가 오류를 던지는 것처럼 보이지만 Pdb는 아닙니다 ( Ipython docs ).


답변

이것이 내가 사용하는 것입니다

py.test tests/ --pdbcls=IPython.core.debugger:Pdb -s


답변

2019-11 현재 수정해야 할 사항은 다음과 같습니다.

pip install ipdb gnureadline ptpython

export PYTEST_ADDOPTS='--pdb --pdbcls=IPython.terminal.debugger:Pdb'


답변