[파이썬] pytest 테스트 케이스 필터링

테스트는 소프트웨어 개발 과정에서 중요한 부분입니다. 효과적인 테스트를 작성하고 실행하는 것은 코드의 신뢰성을 보장하는 데 도움이 됩니다. pytest는 파이썬에서 사용하는 인기 있는 테스트 프레임워크 중 하나입니다. pytest는 간결한 문법과 유연한 기능으로 테스트 작성과 실행을 용이하게 만들어줍니다.

pytest는 다양한 기능을 제공하는데, 그 중에서도 테스트 케이스 필터링은 매우 유용합니다. 테스트 케이스 필터링을 사용하면 다음과 같은 상황에서 선택적으로 테스트를 실행할 수 있습니다:

아래 예제 코드를 통해 pytest에서 테스트 케이스 필터링을 어떻게 사용할 수 있는지 알아보겠습니다.

예제 코드

# test_example.py

import pytest

def test_addition():
    assert 1 + 1 == 2

def test_subtraction():
    assert 5 - 3 == 2

def test_multiplication():
    assert 2 * 2 == 4

@pytest.mark.skip(reason="Example test that will be skipped")
def test_skip():
    assert 10 / 2 == 5

@pytest.mark.parametrize("a, b, expected", [
    (10, 5, 15),
    (7, 3, 10),
    (2, 2, 4)
])
def test_parametrized_addition(a, b, expected):
    assert a + b == expected

위의 예제 코드는 몇 가지 다른 종류의 테스트 함수를 포함하고 있습니다.

pytest에서는 다음과 같은 명령을 사용하여 테스트를 실행할 수 있습니다.

pytest -k <expression>

-k 옵션을 사용하면 <expression>에 해당하는 테스트 함수만 실행할 수 있습니다. <expression>은 함수 이름, 파일 이름 등과 일치하는 문자열을 사용할 수 있습니다.

예를 들어, test_addition() 함수만 실행하려면 다음과 같이 실행할 수 있습니다:

pytest -k test_addition

-k 옵션은 단일 테스트 함수 실행에 유용하지만, 추가적으로 테스트 케이스를 필터링하고 싶을 때는 pytest.mark를 사용해야 합니다. @pytest.mark 데코레이터를 사용하여 테스트 케이스에 특정 마크를 추가할 수 있고, 이를 기반으로 테스트를 필터링할 수 있습니다.

예를 들어, test_skip() 함수가 있는 테스트 케이스를 실행하면서 스킵된 테스트를 모두 무시하고 싶다면 다음과 같이 실행할 수 있습니다:

pytest -m "not skip"

위의 예제에서는 "not skip" 표현식을 사용하여 스킵된 테스트를 제외한 모든 테스트를 실행하도록 필터링하였습니다.

추가적으로, @pytest.mark.parametrize를 사용하는 경우 다양한 매개변수를 가진 테스트 케이스를 실행하는 것도 가능합니다. 이 경우, 특정 매개변수 조합을 사용하여 테스트를 필터링하고 실행할 수 있습니다.

예를 들어, test_parametrized_addition() 함수를 실행하여 (10, 5, 15)와 같은 특정 매개변수 조합을 가진 테스트만 실행하려면 다음과 같이 실행할 수 있습니다:

pytest -k "parametrized_addition and 10 and 5 and 15"

이를 통해 테스트 케이스를 조건에 맞게 필터링하여 실행할 수 있습니다. pytest의 테스트 케이스 필터링 기능을 적절히 활용하여 효율적인 테스트 스위트를 만들어보세요!