[파이썬] pytest에서의 메타 데이터 사용

Pytest는 Python에서 사용되는 테스트 프레임워크로, 간편한 사용법과 강력한 기능을 제공합니다. 이 중에서도 메타 데이터는 테스트 스위트와 테스트 함수에 관련된 추가 정보를 제공하는 데 사용될 수 있습니다. 이 글에서는 pytest에서 메타 데이터를 어떻게 사용하는지 알아보겠습니다.

테스트 스위트에 메타 데이터 추가하기

pytest.ini 또는 setup.cfg 파일을 사용하여 테스트 스위트에 대한 메타 데이터를 정의할 수 있습니다. 이를 통해 테스트 실행 옵션, 환경 변수, 테스트 런너 등을 구성할 수 있습니다. 다음은 pytest.ini 파일을 사용하여 테스트 스위트의 메타 데이터를 정의하는 예시입니다.

# pytest.ini

[pytest]
test_suite_name = MyTestSuite
env_vars = USERNAME=guest PASSWORD=pass123

위의 예시에서는 test_suite_nameenv_vars라는 두 가지 메타 데이터를 정의하였습니다. 이 테스트 스위트에는 MyTestSuite라는 이름과 USERNAME=guest, PASSWORD=pass123라는 환경 변수가 사용되게 됩니다.

테스트 함수에 메타 데이터 추가하기

테스트 함수마다 특정한 메타 데이터를 추가하여 테스트 실행 옵션을 변경하거나 테스트 케이스를 분류할 수 있습니다. 이를 위해서는 @pytest.mark 데코레이터와 함께 사용할 수 있는 다양한 메타 데이터가 제공됩니다. 다음은 몇 가지 예시입니다.

import pytest

@pytest.mark.skip(reason="테스트 준비 중")
def test_something():
    assert True

@pytest.mark.parametrize("input, output", [("hello", "HELLO"), ("world", "WORLD")])
def test_uppercase(input, output):
    assert input.upper() == output

@pytest.mark.slow
def test_performance():
    # 퍼포먼스 테스트 실행 로직
    assert True

위의 예시에서는 @pytest.mark.skip을 사용하여 test_something 함수가 테스트 준비 중임을 나타내고 있습니다. @pytest.mark.parametrize를 사용하여 test_uppercase 함수를 여러 번 반복실행하며 다른 입력과 출력을 테스트할 수 있습니다. @pytest.mark.slow를 사용하여 test_performance 함수가 퍼포먼스 테스트인 것을 나타내고 있습니다.

메타 데이터 사용하여 테스트 실행하기

메타 데이터를 추가한 후에는 해당 메타 데이터를 기준으로 테스트를 실행할 수 있습니다. 명령줄에서 pytest를 실행할 때 --markers 옵션을 사용하면 메타 데이터의 종류와 설명을 확인할 수 있습니다. 예를 들어, --markers 옵션으로 실행한 결과는 다음과 같습니다.

$ pytest --markers

@skip(reason): 테스트를 건너뛰기 위한 메타데이터
@parametrize(argnames, argvalues): 테스트 케이스(parameterized test cases) 생성을 위한 메타데이터
@slow: 테스트가 성능 테스트인 것을 나타내는 메타데이터

또한, 메타 데이터를 기준으로 테스트를 실행할 때는 -m 옵션을 사용합니다. 예를 들어, @slow 메타 데이터를 가진 테스트만 실행하고 싶다면 다음과 같이 명령을 입력합니다.

$ pytest -m slow

이와 같이 pytest의 메타 데이터 기능을 사용하면 쉽게 테스트 스위트와 테스트 함수에 대한 추가 정보를 제공하고, 필요에 따라 테스트 실행을 제어할 수 있습니다.

추가적인 pytest의 메타 데이터에 대한 정보는 pytest 공식 문서에서 확인할 수 있습니다.