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


96

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

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

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

답변:


153

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

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

py.test -s my_test.py

10
Django에서이 작업을 수행 addopts = -s하려면 pytest.ini파일에 추가 하십시오.
— Rahul Gupta 2015

39

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


1
TerminalPdb다시 작동하고 탭 완성을 제공하므로 선호하는 솔루션입니다.
— Uwe L. Korn

ipython 품질 검사를받은 ppdb를 찾아보세요
— msudder

2

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

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


0

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

pip install ipdb gnureadline ptpython

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

1
당신이 설치하는 경우 prompt-toolkit 버전 2.0.10이 나누기 때문에 다음 ipdb은 3.0.0로 인해이 패키지의 최신 업데이트에 미세 다시 작동합니다
— 파블 Barcik에게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.