[파이썬] pytest 테스트의 반복성 보장하기

테스트를 작성할 때, 코드의 일부분을 여러 번 반복해야 하는 경우가 있습니다. 이는 특정한 동작이 항상 동일한 결과를 반환하는지 확인하기 위해 필요한 경우입니다. 이러한 테스트의 반복성을 보장하기 위해 pytest라는 파이썬 테스트 프레임워크를 사용할 수 있습니다.

pytest란?

pytest는 파이썬에서 자동화된 테스트를 작성할 수 있는 강력한 도구입니다. unittest를 비롯한 다른 테스트 프레임워크보다 쉽고 유연하며 확장 가능한 기능을 제공합니다. pytest는 코드의 일부분을 반복해서 실행하고, 예상 출력과 실제 출력을 비교하며, 테스트 결과를 자세하게 보고하는 등 다양한 기능을 제공합니다.

테스트의 반복성 보장하기

pytest에서는 테스트의 반복성을 보장하기 위해 몇 가지 기능을 제공합니다.

@pytest.mark.parametrize

특정한 테스트 케이스를 여러 번 실행해야 하는 경우, @pytest.mark.parametrize 데코레이터를 사용하여 테스트에 인수를 전달할 수 있습니다. 이를 통해 동일한 테스트 코드를 여러 값으로 실행하면서 결과를 확인할 수 있습니다.

예를 들어, 아래와 같이 add 함수에 대한 테스트를 작성하고 싶다고 가정해 보겠습니다.

def add(a, b):
    return a + b

이 함수를 테스트하기 위해 pytest를 사용하려면 다음과 같은 테스트 함수를 작성할 수 있습니다.

import pytest

@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),
    (4, 5, 9),
    (10, 20, 30)
])
def test_add(a, b, expected):
    assert add(a, b) == expected

위의 코드에서 @pytest.mark.parametrize 데코레이터는 a, b, expected와 같은 인수를 전달하고, 이들 값의 조합으로 테스트 함수를 여러 번 실행합니다. 이를 통해 add 함수의 결과가 예상한 대로 반환되는지 확인할 수 있습니다.

@pytest.mark.repeat

@pytest.mark.repeat 데코레이터를 사용하면, 특정 테스트 함수를 여러 번 반복해서 실행할 수 있습니다. 이를 통해 특정한 테스트 시나리오를 여러 번 반복하여 코드의 반복성을 보장할 수 있습니다.

예를 들어, 다음과 같이 divide 함수에 대한 테스트를 작성하고 싶다고 가정해 보겠습니다.

def divide(a, b):
    return a / b

이 함수를 반복적으로 테스트하기 위해 pytest를 사용하려면 다음과 같은 테스트 함수를 작성할 수 있습니다.

import pytest

@pytest.mark.repeat(5)
def test_divide():
    assert divide(10, 2) == 5

위의 코드에서 @pytest.mark.repeat(5) 데코레이터는 test_divide 함수를 5번 반복해서 실행합니다. 이를 통해 divide 함수의 결과가 항상 5가 되는지 확인할 수 있습니다.

결론

pytest를 사용하면 테스트의 반복성을 보장하기 위해 간단하고 유연한 기능을 활용할 수 있습니다. @pytest.mark.parametrize 데코레이터를 사용하여 여러 값의 조합으로 테스트를 실행하고, @pytest.mark.repeat 데코레이터를 사용하여 동일한 테스트를 여러 번 실행할 수 있습니다. 이를 통해 코드의 일관성과 신뢰성을 높일 수 있습니다.