Pytest의 실행 명령어 및 환경 설정 파일(pytest.ini)에 대해 정리한 포스팅 입니다.
$ pytest
디렉토리 내 test_*.py
또는 *_test.py
파일을 모두 실행합니다.
만약 프로젝트 root 경로에서 특정 디렉토리 내부의 테스트 파일을 수행해야한다면, 아래와 같이 root 경로 기준 파일 위치를 입력하여 테스트 파일을 실행합니다.
$ python -m pytest {디렉터리명}/{테스트파일명}.py
이제 pytest로 테스트 파일을 실행하면서 주로 사용하는 여러 명령어 옵션들을 소개합니다.
테스트 파일의 특정 테스트 함수만 실행할 경우, -k
옵션을 사용합니다.
(참고로 테스트 함수명은 무조건 test_
로 시작해야합니다. 그래야 테스트 함수로 인식합니다.)
$ pytest {테스트파일명}.py -k {테스트함수명}
기본 실행 명령어로는 Fail 건만 F로 출력하고, Pass 건은 .으로 표시하는 반면, -v
옵션 추가 시에는 각 테스트함수 실행 결과를 출력합니다.
-v
옵션으로는 내용이 일부 생략될 수 있습니다.
-vv
옵션을 추가하면, -v
옵션보다 verbosity level을 높여 더 자세한 테스트 실행 결과를 출력합니다.
(얼마나 더 자세한지는 잘 모르겠네요..)
일반적으로 Failed 건에 대한 stdout, stderr 메세지는 캡쳐됩니다.
해당 메세지 캡쳐 기능을 비활성화 하고 싶을 때, -s
옵션을 사용합니다. --capture=no
의 shortcut이라고 볼 수 있습니다.
만약 Passed 건에 대해서도 stdout, stderr 메세지를 캡쳐하고 싶다면, --capture=tee-sys
옵션을 사용하면 됩니다.
메세지 캡쳐에 대한 추가 정보는 공식 문서 에서 확인하실 수 있습니다.
short test summary info에 출력되는 테스트 결과에 대한 옵션 입니다.
테스트 결과 관련 옵션
-r
옵션 뒤에 붙이는 문자에 따라 short test summary info가 출력됩니다.
디폴트 옵션은 -rfE
로, failed와 error 건이 출력됩니다.
ex)
-rA
: 모든 테스트 결과 출력-ra
: passed 건 제외하고 모든 테스트 결과 출력-fEs
: failed, error, skipped 건 출력-rN
: 출력하지 않음테스트 결과가 Fail이 하나라도 발생할 때 테스트 수행을 멈추고 싶은 경우, -x
옵션을 사용합니다.
테스트 결과가 Fail N건 일 때 테스트 수행을 멈추고 싶은 경우, --maxfail=N
옵션을 사용합니다.
테스트 실제 수행이 아닌 테스트 실행 시 수행되는 모듈, 기능 및 매개변수를 확인하고 싶은 경우, --collect-only
옵션을 사용합니다.
(캡쳐 추가 예정)
JUnit XML 형식의 테스트 결과 리포트를 출력하기 위해 --junit-xml={디렉터리명}/{xml리포트파일명}.xml
옵션을 사용합니다.
(이 옵션을 사용하여 pytest 실행 후 Jenkins 에서 빌드 후 조치로 'Publish JUnit test result report'에서 해당 xml 파일 맵핑 설정을 해두면, Jenkins 빌드 결과 'Test Result' 메뉴에서 테스트 결과를 확인할 수 있습니다.)
--color=yes
옵션을 사용하면 테스트 결과 출력 시, 색상을 입힐 수 있습니다. (이 옵션도 Jenkins Console Output에서 테스트 결과 확인 시, Passed/Failed 강조된 색상으로 확인할 수 있어 유용합니다.)
기존에 실행된 pytest 테스트 이력이 있다면(.pytest_cache 디렉터리 기반), 아래 명령어 옵션을 통해 이전 테스트에서 실패한 테스트를 재수행할 수 있습니다.
--lf
, --last-failed
: 이전 테스트에서 실패한 테스트만 재수행--ff
, --failed-first
: 이전 테스트에서 실패한 테스트 먼저 수행한 이후 나머지 테스트 수행https://docs.pytest.org/en/latest/how-to/cache.html
--clear-cache
옵션을 사용하면 모든 캐시 파일을 초기화하고 실행할 수 있습니다. 공식 문서에서는 속도보다 정확성이 우선시되어야하는 CI 서버에서 해당 옵션을 사용하길 권장하고 있습니다.
그 외 옵션들은 여기서 확인하실 수 있습니다. (또는 $ pytest -h
명령어로 확인하실 수 있습니다)
옵션에 플러그인까지 사용하면 테스트 파일을 실행하기 위한 명령어가 점점 길어질 수 있는데, pytest.ini 파일에서 아래와 같이 테스트 파일로 인식할 파일 형태나 기본 실행할 명령어 옵션을 설정할 수 있습니다.
[pytest]
python_files = test_*.py *_tests.py check_*.py
addopts = -vv --maxfail=10
pytest.ini에서 할 수 있는 다른 설정 옵션이 궁금하시다면 여기를 참고해주세요.