Pytest로 테스트하기

Pytest로 테스트하기

Python
Pytest로 테스트하기
Author

gabriel yang

Published

October 7, 2024


Pytest로 시작하기: 기초부터 실전까지

Python에서 테스트를 자동화하는 것은 코드의 신뢰성을 높이고, 유지보수를 쉽게 하는 데 필수적입니다. pytest는 Python의 대표적인 테스트 프레임워크로, 간결한 코드 작성과 강력한 기능을 제공합니다.

1. Pytest 설치

Pytest는 pip를 통해 쉽게 설치할 수 있습니다. 먼저, 아래 명령어로 pytest를 설치하세요:

pip install pytest

설치가 완료되면 pytest 명령어가 실행 가능한지 확인할 수 있습니다:

pytest --version

2. 기본 테스트 함수 작성

pytest로 테스트를 작성하는 가장 기본적인 방법은, test_로 시작하는 함수를 정의하는 것입니다. 아래 예제는 두 수의 합을 테스트하는 단순한 코드입니다.

예제 코드: test_math.py

# 함수 정의
def add(a, b):
    return a + b

# 테스트 함수
def test_add():
    assert add(2, 3) == 5  # 테스트가 통과할 조건
    assert add(1, 1) == 2  # 또 다른 테스트 조건

3. 테스트 실행

테스트를 실행하려면, 터미널에서 해당 디렉터리로 이동한 후 pytest 명령어를 실행하면 됩니다.

pytest

출력 예시:

==================== test session starts ====================
collected 1 item

test_math.py .                                         [100%]

===================== 1 passed in 0.03s =====================

여기서 .는 테스트가 성공적으로 통과했음을 의미합니다.

4. 테스트 함수에 다양한 입력값 적용하기 (Parameterize)

pytest의 유용한 기능 중 하나는 같은 테스트 함수에 여러 입력값을 적용해 테스트를 확장하는 것입니다. 이를 @pytest.mark.parametrize 데코레이터를 사용하여 구현할 수 있습니다.

예제 코드: 매개변수화된 테스트

import pytest

@pytest.mark.parametrize("a, b, expected", [
    (1, 2, 3),  # 첫 번째 테스트 케이스
    (2, 3, 5),  # 두 번째 테스트 케이스
    (5, 5, 10), # 세 번째 테스트 케이스
])
def test_add(a, b, expected):
    assert add(a, b) == expected

이제 같은 테스트 함수에서 다양한 입력값을 한 번에 처리할 수 있습니다.

5. 예외 처리 테스트하기

때로는 함수가 올바르게 예외를 발생시키는지 테스트할 필요가 있습니다. pytest는 이를 위해 pytest.raises 컨텍스트 매니저를 제공합니다.

예제 코드: 예외 처리 테스트

def divide(a, b):
    if b == 0:
        raise ValueError("0으로 나눌 수 없습니다.")
    return a / b

def test_divide():
    with pytest.raises(ValueError):  # ValueError 예외가 발생해야 테스트 통과
        divide(10, 0)

6. Pytest의 장점: 디렉토리 구조와 자동 탐지

pytest는 테스트 파일을 자동으로 탐지합니다. 보통 test_로 시작하는 파일과 함수, 혹은 _test.py로 끝나는 파일을 찾아서 실행합니다. 프로젝트 규모가 커지면 다음과 같은 디렉토리 구조를 자주 사용합니다:

project/

├── src/
   └── my_module.py

└── tests/
    ├── test_my_module.py

tests/ 디렉토리에 여러 테스트 파일을 두고 pytest를 실행하면 모든 테스트가 자동으로 실행됩니다.

7. 테스트 보고서 보기

테스트를 실행하면 기본적으로 콘솔에 간략한 성공/실패 정보를 출력하지만, 더 상세한 정보를 보고 싶다면 -v 옵션을 추가할 수 있습니다.

pytest -v

출력 예시:

==================== test session starts ====================
collected 1 item

test_math.py::test_add PASSED                             [100%]

===================== 1 passed in 0.01s =====================

8. 실패한 테스트 재실행

테스트가 실패할 경우, --maxfail 옵션을 통해 실패한 테스트에서 바로 중단할 수 있습니다. 또한 --rerun 옵션을 사용하여 실패한 테스트만 다시 실행할 수도 있습니다.

pytest --maxfail=1 --rerun 2