[파이썬] pytest 로깅 설정 및 활용

pytest은 파이썬의 테스트 프레임워크로 널리 사용되고 있습니다. 테스트를 실행하면 테스트 결과뿐만 아니라 로그 메시지도 출력할 수 있습니다. 로그는 테스트 실행과정에서의 디버깅 및 분석에 도움이 되며, 테스트 결과에 문제가 있을 때 유용한 정보를 제공할 수 있습니다. 이번 글에서는 pytest에서 로깅을 설정하고 활용하는 방법에 대해 알아보겠습니다.

로깅 설정하기

pytest의 로깅 기능을 활용하기 위해서는 로깅 레벨을 설정해야 합니다. 로깅 레벨은 다음과 같이 5가지로 구분됩니다.

기본적으로 pytest의 로깅 레벨은 WARNING이며, 이는 WARNING레벨 이상의 로그 메시지만 출력됩니다. 하지만 우리는 필요에 따라 로깅 레벨을 변경할 수 있습니다. 로깅 레벨을 변경하려면 pytest.ini 파일 또는 pytest 실행 옵션에 해당 로그 레벨을 지정해주면 됩니다.

  1. pytest.ini 파일을 만들고 아래와 같이 설정합니다.
[pytest]
log_cli = true
log_cli_level = DEBUG
  1. 또는 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을 통해 테스트를 실행할 때 로깅 레벨 설정과 필터링을 활용하여 원하는 로그 메시지를 출력할 수 있습니다. 이를 통해 테스트의 디버깅과 분석을 보다 효율적으로 수행할 수 있습니다.