pytest
은 파이썬의 테스트 프레임워크로 널리 사용되고 있습니다. 테스트를 실행하면 테스트 결과뿐만 아니라 로그 메시지도 출력할 수 있습니다. 로그는 테스트 실행과정에서의 디버깅 및 분석에 도움이 되며, 테스트 결과에 문제가 있을 때 유용한 정보를 제공할 수 있습니다. 이번 글에서는 pytest
에서 로깅을 설정하고 활용하는 방법에 대해 알아보겠습니다.
로깅 설정하기
pytest
의 로깅 기능을 활용하기 위해서는 로깅 레벨을 설정해야 합니다. 로깅 레벨은 다음과 같이 5가지로 구분됩니다.
- CRITICAL
- ERROR
- WARNING
- INFO
- DEBUG
기본적으로 pytest
의 로깅 레벨은 WARNING
이며, 이는 WARNING
레벨 이상의 로그 메시지만 출력됩니다. 하지만 우리는 필요에 따라 로깅 레벨을 변경할 수 있습니다. 로깅 레벨을 변경하려면 pytest.ini
파일 또는 pytest
실행 옵션에 해당 로그 레벨을 지정해주면 됩니다.
pytest.ini
파일을 만들고 아래와 같이 설정합니다.
[pytest]
log_cli = true
log_cli_level = DEBUG
- 또는
pytest
실행 옵션으로 로그 레벨을 지정할 수 있습니다.
pytest -o log_cli=true -o log_cli_level=DEBUG
위의 설정에서 log_cli
는 로그를 콘솔에 출력할지 여부를 나타내며, log_cli_level
은 출력할 로그 레벨을 설정합니다.
로그 사용하기
pytest
에서는 logging
모듈을 사용하여 로그를 출력할 수 있습니다. 로그 레벨에 따라 다양한 메서드를 사용할 수 있습니다. 아래는 간단한 예시입니다.
import logging
def test_logging():
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
이제 테스트를 실행하면 설정한 로그 레벨에 따라 로그 메시지가 출력됩니다. pytest
의 실행 로그와 함께 테스트 함수에서 출력한 로그 메시지도 화면에 출력됩니다.
로깅 메시지 필터링하기
실행하는 테스트 함수에 따라 출력되는 로그의 양이 많을 수 있습니다. 때로는 필요한 로그만 필터링해서 출력할 필요가 있을 수 있습니다. 이를 위해 pytest
은 로깅 메시지 필터링 옵션을 제공합니다.
[pytest]
log_cli_filter = mymodule
위의 설정은 mymodule
이라는 문자열이 포함된 로그 메시지만 출력하는 필터링을 설정한 것입니다. 필터링 옵션은 정규식 패턴으로 지정할 수도 있습니다.
결론
pytest
로깅 설정 및 활용에 대해 알아보았습니다. 로그는 디버깅과 테스트 결과 분석에 매우 유용한 도구입니다. pytest
을 통해 테스트를 실행할 때 로깅 레벨 설정과 필터링을 활용하여 원하는 로그 메시지를 출력할 수 있습니다. 이를 통해 테스트의 디버깅과 분석을 보다 효율적으로 수행할 수 있습니다.