pytest는 파이썬 기반의 테스트 프레임워크로, 간단하고 유연한 테스트 작성을 위한 많은 기능을 제공합니다. pytest의 중요한 기능 중 하나는 테스트 파라미터화입니다. 이 기능을 사용하면 하나의 테스트 케이스를 여러 다른 입력 값과 함께 반복해서 실행할 수 있습니다.
테스트 파라미터화를 사용하면 반복적인 테스트 작성을 줄일 수 있고, 다양한 입력 값에 대한 테스트를 간편하게 작성할 수 있습니다. 이제 이 기능을 더욱 확장해보도록 하겠습니다.
@pytest.mark.parametrize
pytest에서 테스트 파라미터화를 하기 위해 사용하는 데코레이터는 @pytest.mark.parametrize
입니다. 예를 들어, 아래와 같이 간단한 덧셈 테스트를 작성해보겠습니다.
import pytest
def add(a, b):
return a + b
@pytest.mark.parametrize("a, b, expected", [
(1, 2, 3),
(2, 3, 5),
(10, -5, 5)
])
def test_add(a, b, expected):
assert add(a, b) == expected
위의 예제에서는 @pytest.mark.parametrize
데코레이터를 사용하여 a
, b
, expected
라는 세 가지 파라미터를 정의하고, 이 파라미터들에 대한 여러 개의 입력 값을 리스트로 전달합니다. 테스트 함수 test_add
는 이 파라미터들을 입력으로 받아 테스트를 수행하고, 각각의 입력 값에 대해서 예상되는 결과와 일치하는지 확인합니다.
테스트 파라미터 동적 생성
테스트 파라미터를 리스트로 정의하는 것 외에도, pytest는 파라미터를 동적으로 생성할 수 있는 기능도 제공합니다. 이를 활용하면 테스트 파라미터를 더 유연하게 생성할 수 있습니다.
import pytest
def get_test_parameters():
return [(1, 2, 3), (2, 3, 5), (10, -5, 5)]
@pytest.mark.parametrize("a, b, expected", get_test_parameters())
def test_add(a, b, expected):
assert add(a, b) == expected
위의 예제에서는 get_test_parameters
라는 함수를 통해 테스트 파라미터를 동적으로 생성합니다. 이를 @pytest.mark.parametrize
의 호출 인자로 전달하여 사용합니다. 이렇게 하면 테스트 파라미터를 동적으로 관리할 수 있으며, 필요에 따라 파라미터를 추가하거나 수정할 수 있습니다.
커스텀 픽스처와 테스트 파라미터
pytest의 다른 기능 중 하나는 커스텀 픽스처입니다. 픽스처는 테스트 함수가 실행되기 전에 필요한 리소스를 설정하거나 테스트 후에 정리하는 등의 작업을 수행하는 함수입니다. 이와 테스트 파라미터화를 결합하여 효율적인 테스트 작성을 할 수 있습니다.
import pytest
def setup_db():
# 데이터베이스 연결 설정
...
def teardown_db():
# 데이터베이스 연결 종료
...
@pytest.fixture(scope="module")
def db():
setup_db()
yield
teardown_db()
@pytest.mark.parametrize("a, b, expected", [
(1, 2, 3),
(2, 3, 5),
(10, -5, 5)
])
def test_add(db, a, b, expected):
assert add(a, b) == expected
위의 예제에서는 db
라는 커스텀 픽스처를 정의하여 데이터베이스 연결 설정 및 종료를 처리합니다. 이 픽스처를 test_add
테스트 함수에 적용하고, 테스트 파라미터와 함께 사용합니다. 이렇게 함으로써 각 테스트 파라미터마다 데이터베이스를 설정하고 정리할 수 있으며, 테스트 중에 필요한 리소스를 효율적으로 관리할 수 있습니다.
결론
pytest에서 테스트 파라미터화 기능을 활용하면 다양한 입력 값에 대한 테스트를 쉽게 작성할 수 있습니다. 이를 확장하여 테스트 파라미터를 동적으로 생성하거나 커스텀 픽스처와 함께 사용하는 등의 방법으로 테스트 작성의 유연성과 효율성을 높일 수 있습니다. 이러한 pytest의 기능을 적극 활용하여 테스트 코드의 품질을 향상시키고, 개발 프로세스의 효율성을 높이는데 도움이 될 것입니다.
더 많은 pytest 기능에 대해 알고 싶다면 공식 문서를 참조해주세요.