Program Tip

어떻게 든 py.test를 사용할 때 파이썬 디버거로 디버깅 할 수 있습니까?

programtip 2020. 12. 3. 19:11
반응형

어떻게 든 py.test를 사용할 때 파이썬 디버거로 디버깅 할 수 있습니까?


내 파이썬 프로그램을 단위 테스트하기 위해 py.test를 사용하고 있습니다. 파이썬 디버거로 테스트 코드를 정상적인 방식으로 디버깅하고 싶지만 (코드에서 pdb.set_trace () 의미) 작동하도록 만들 수 없습니다.

코드에 pdb.set_trace ()를 넣는 것은 작동하지 않습니다 (출력이 캡처되는 동안 IOError : stdin에서 읽기 발생). 나는 또한 --pdb 옵션을 사용하여 py.test를 실행하려고 시도했지만 내 주장 이전에 무슨 일이 발생하는지 탐구하고 싶다면 트릭을 수행하지 않는 것 같습니다. 어설 션이 실패하면 중단되며 해당 행에서 이동하면 프로그램이 종료됩니다.

누구든지 디버깅을 얻는 방법을 알고 있습니까? 아니면 디버깅과 py.test가 함께 할 의도가 없습니까?


정말 간단합니다. assert 0코드에서 디버깅을 시작할 위치를 지정하고 다음을 사용하여 테스트를 실행합니다.

py.test --pdb 

완료 :)

또는 pytest-2.0.1 이상을 사용하는 경우 pytest.set_trace()테스트 코드의 아무 곳에 나 넣을 수 있는 도우미 있습니다. 다음은 문서 입니다. pdb 디버거 명령 줄로 보내기 전에 내부적으로 캡처를 비활성화하도록주의해야합니다.


캡처가 비활성화 된 상태에서 py.test를 실행 한 다음 평소와 같이 pdb.set_trace ()를 사용할 수 있음을 발견했습니다.

> py.test --capture=no
============================= test session starts ==============================
platform linux2 -- Python 2.5.2 -- pytest-1.3.3
test path 1: project/lib/test/test_facet.py

project/lib/test/test_facet.py ...> /home/jaraco/projects/project/lib/functions.py(158)do_something()
-> code_about_to_run('')
(Pdb)

가장 쉬운 방법은 py.test 메커니즘을 사용하여 중단 점을 만드는 것입니다.

http://pytest.org/latest/usage.html#setting-a-breakpoint-aka-set-trace

import pytest
def test_function():
    ...
    pytest.set_trace()    # invoke PDB debugger and tracing

또는 pytest의 디버거를 한 줄로 변경하려면 다음 import pdb; pdb.set_trace()으로 변경하십시오.import pytest; pytest.set_trace()


나는 py.test에 익숙하지 않으며 unittest를 위해 다음을 수행합니다. 아마도 py.test는 비슷합니다.

테스트 모듈 (mytestmodule.py)에서 :

if __name__ == "__main__":
    unittest.main(module="mytestmodule")

그런 다음 테스트를 실행하십시오.

python -m pdb mytestmodule.py

대화 형 pdb 셸을 얻게됩니다.

문서를 보면 py.test에 --pdb명령 줄 옵션 이있는 것 같습니다 .

http://codespeak.net/py/dist/test/features.html

참고 URL : https://stackoverflow.com/questions/2678792/can-i-debug-with-python-debugger-when-using-py-test-somehow

반응형