sourcecode

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

copyscript 2023. 10. 21. 10:41
반응형

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

테스트 스위트에 파이테스트를 사용하고 있습니다.복잡한 부품간 테스트에서 버그를 잡으면서 배치하고 싶습니다.import ipdb; ipdb.set_trace()디버그를 할 수 있게 하기 위해 제 코드 중간에 말입니다.

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

저는 실패 후 pdb나 ipdb로 점프하는 것에 관심이 없지만, 코드의 어디에나 브레이크를 두고 실패가 발생하기 전에 디버그할 수 있습니다.

pytest가 기본적으로 출력을 캡처하기 때문에 오류가 발생합니다.

Pytest를 실행할 수 있습니다.-s옵션(캡처 출력 끄기).예를 들어,

py.test -s my_test.py

그 다음에my_test.py:

import ipdb;
ipdb.set_trace()

안타깝게도 pytest-ipdb는 더 이상 지원되지 않습니다.

해결책은 실행하는 것입니다.pytest my_test.py --pdb --pdbcls=IPython.terminal.debugger:Pdb

help 명령에서 다음을(를)

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

2019-11년 현재 이 문제를 해결해야 할 사항은 다음과 같습니다.

pip install ipdb gnureadline ptpython

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

이것은 제가 사용하는 것입니다.

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

당신은 당신에게 주고 싶을지도 모릅니다.pdbpp시도해봐요. 저는 그것보다 더 많은 성공을 거뒀습니다.ipdb와 함께 사용할 경우pytest. 제 답변을 여기서 보세요: https://stackoverflow.com/a/69320311/2896799 .

언급URL : https://stackoverflow.com/questions/16022915/how-to-execute-ipdb-set-trace-at-will-while-running-pytest-tests

반응형