어떤 프로그램을 테스트 할 때 pytest를 쓰는 편입니다. 이번 시간에는 print 문으로 출력한 것을 어떻게 콘솔로 볼 수 있는지 알아보겠습니다.

 


 기본적으로 pytest는 capture 옵션을 fd로 받게 되어 있습니다. 이는 문서에도 나와 있는 부분이에요. 1번과 2번 데스크립터에 쓰여지는 내용, 즉 표준 출력과 오류가 모두 캡쳐되는 것이 default입니다. 실험을 하나 해 보겠습니다.

 

 

 예제 프로그램 1번은 test_feature_a라는 함수를 만들었습니다. 간단하게 "1"을 표준 출력에 출력합니다.

 

 그런데, 1이라는 것은 출력되지 않았습니다. 이는, 문서에 따르면 캡쳐되었기 때문입니다.

 

 

 이것은 어떨까요? 1.txt에 1이라는 내용을 쓰는 프로그램입니다.

 

 역시 테스트는 성공하였습니다.

 

 1.txt에 쓰여진 내용 역시 1로 잘 출력되었습니다. 어? 이건 왜 그런 것일까요? 표준 입력, 출력이 아니였기 때문입니다. 이 말은, 파일에 출력하는 것은 문서에서 설명하는 1번, 2번 데스크립터와 와 별개의 fd를 사용했습니다. 고로, 캡쳐가 되지 않았고 파일에 출력되었던 것입니다.

 

 


 그러면 어떻게 해야 print에 있는 내용이 콘솔에 출력될까요?

 

 pytest의 --capture 옵션을 보면, fd, sys, no, tee-sys 이렇게 4개가 있다고 나와 있습니다. 디폴트가 fd입니다.

 

 -s는 --capture=no의 짧은 버전입니다. 고로, 뒤에 -s를 붙여주면 캡쳐를 하지 않게 됩니다.

 

 main.py는 메서드 test_a를 호출합니다. !를 print합니다.

 

 -s 옵션을 붙여서 실행해 보겠습니다. 그러면 !이 떡하니 나오게 됩니다. 어떠한 캡쳐도 하지 않기 때문에, 표준 출력이나 에러 출력도 콘솔에 나오게 됩니다.