[파이썬] pytest 테스트에 타임아웃 설정하기

pytest는 파이썬으로 작성된 테스트 프레임워크로, 코드의 품질을 보장하고 버그를 찾기 위해 사용됩니다. pytest는 다양한 기능을 제공하며, 이 중에서도 테스트에 타임아웃을 설정하는 기능은 특히 유용합니다. 이 기능을 사용하면 오랜 시간 동안 실행되는 테스트를 타임아웃 설정을 통해 제한할 수 있습니다.

타임아웃 설정 방법

pytest에서 테스트에 타임아웃을 설정하는 방법은 매우 간단합니다. @pytest.mark.timeout 데코레이터를 사용하여 각 테스트 함수에 타임아웃을 설정할 수 있습니다.

아래 예시를 통해 타임아웃 설정 방법을 알아보겠습니다.

import pytest
import time

@pytest.mark.timeout(2) # 테스트에 2초의 타임아웃 설정
def test_timeout():
    # 3초가 소요되는 작업
    time.sleep(3)
    assert True

위의 예시에서는 test_timeout라는 테스트 함수에 2초의 타임아웃을 설정하였습니다. 이 함수 안에서 3초 동안 time.sleep(3)이 실행되는데, 타임아웃 설정 때문에 이 함수는 2초가 지나면 자동으로 실패하게 됩니다.

타임아웃 설정 옵션

@pytest.mark.timeout 데코레이터를 사용해서 타임아웃을 설정할 때, 다양한 옵션을 사용할 수 있습니다. 몇 가지 예시를 살펴보겠습니다.

시간 단위 설정

타임아웃 설정에서 시간 단위를 지정할 수 있습니다. 기본은 (seconds)입니다. 아래 예시에서는 1분의 타임아웃을 설정하고 있습니다.

@pytest.mark.timeout(60, 'seconds')
def test_timeout():
    # 테스트 코드
    assert True

메시지 설정

타임아웃이 발생했을 때 출력되는 메시지를 설정할 수 있습니다. 아래 예시에서는 'Timeout Error'라는 메시지를 설정하였습니다.

@pytest.mark.timeout(5, message='Timeout Error')
def test_timeout():
    # 테스트 코드
    assert True

타임아웃 예외

타임아웃이 발생했을 때 발생하는 예외를 설정할 수 있습니다. 기본적으로는 TimeoutError 예외가 발생하며, 직접 설정할 수도 있습니다. 아래 예시에서는 CustomTimeoutError라는 예외를 설정하였습니다.

class CustomTimeoutError(Exception):
    pass

@pytest.mark.timeout(5, exception=CustomTimeoutError)
def test_timeout():
    # 테스트 코드
    assert True

마치며

pytest를 사용하여 테스트 코드를 작성할 때, 테스트에 타임아웃을 설정하는 것은 중요한 요소입니다. 타임아웃을 설정하여 오랜 시간이 걸리는 테스트에 제한을 두면, 테스트 프로세스가 멈추지 않고 원활하게 진행될 수 있습니다. 타임아웃 설정은 테스트의 안전성과 신뢰성을 높일 수 있는 좋은 방법입니다.