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.