[python] doctest를 사용하여 성능 테스트를 하는 방법은?

doctest는 Python의 내장 라이브러리로, 모듈의 docstring에 포함된 예제 코드를 테스트하는 도구입니다. 이를 사용하여 함수의 실행 시간 등을 측정하여 성능 테스트를 할 수 있습니다.

아래는 doctest를 사용하여 성능 테스트를 하는 방법을 보여주는 예시 코드입니다.

import timeit

def fibonacci(n):
    """Return the n-th Fibonacci number.

    Examples:
    >>> fibonacci(0)
    0
    >>> fibonacci(1)
    1
    >>> fibonacci(5)
    5
    >>> fibonacci(10)
    55
    """

    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)

if __name__ == "__main__":
    # 성능 테스트를 위해 30번째 피보나치 수를 실행하는데 걸리는 시간을 측정합니다.
    execution_time = timeit.timeit("fibonacci(30)", globals=globals(), number=1)
    print(f"Execution Time: {execution_time} seconds")

위의 예제 코드에서 fibonacci 함수의 docstring에는 실행 예시와 예상되는 결과가 주석으로 포함되어 있습니다. doctest는 이러한 주석을 테스트하고, 예제가 예상 결과와 일치하는지 확인합니다.

해당 코드를 실행하면, 실행 시간이 콘솔에 출력됩니다. 이를 통해 fibonacci 함수의 성능을 측정할 수 있습니다.

성능 테스트를 위해 측정하고자 하는 코드를 적절히 실행하는 부분을 timeit.timeit() 함수로 감싸고, globals=globals(), number=1 인자를 전달합니다. 이렇게 하면 해당 코드가 1번 실행되는 데 걸리는 시간을 측정할 수 있습니다.

위의 예제는 Fibonacci 수열을 계산하는 함수를 대상으로 성능 테스트를 수행한 것입니다. 실제로 사용하는 함수에 따라 doctest를 활용하여 성능 테스트를 할 수 있습니다.

참고 자료: