테스트는 소프트웨어 개발 과정에서 중요한 부분입니다. 효과적인 테스트를 작성하고 실행하는 것은 코드의 신뢰성을 보장하는 데 도움이 됩니다. 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
위의 예제 코드는 몇 가지 다른 종류의 테스트 함수를 포함하고 있습니다.
test_addition()
: 더하기에 대한 단순한 테스트 케이스test_subtraction()
: 빼기에 대한 단순한 테스트 케이스test_multiplication()
: 곱하기에 대한 단순한 테스트 케이스test_skip()
: 실행이 건너뛰어져야 하는 테스트 케이스test_parametrized_addition()
: 매개변수를 사용하는 테스트 케이스
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의 테스트 케이스 필터링 기능을 적절히 활용하여 효율적인 테스트 스위트를 만들어보세요!