본문 바로가기
카테고리 없음

[파이썬 심화] pytest 기본, parametrize 고급처리, 실무 활용

by 개발자를 꿈꾸는 사람들과 함꼐 2025. 4. 15.

pytest 기본 사용법과 구조 이해

pytest는 파이썬에서 가장 널리 사용되는 테스트 프레임워크 중 하나입니다.
unittest보다 문법이 간결하고 직관적이며, 강력한 플러그인 생태계를 자랑합니다.

1. 설치하기

pip install pytest

2. 가장 기본적인 테스트 파일

📁 test_math.py

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

def test_add():
    assert add(2, 3) == 5

3. 실행 방법

pytest

해석:

      
  • 함수 이름은 반드시 test_로 시작해야 합니다.
  •   
  • assert 키워드만으로 검증 가능 → self.assertEqual()보다 간결
  •   
  • 실행 시 자동으로 test_*.py 파일을 찾아 테스트 수행

parametrize 고급처리, 예외 처리, fixture

1. 다양한 인풋 테스트 - parametrize

import pytest

@pytest.mark.parametrize("a,b,expected", [
    (2, 3, 5),
    (10, 5, 15),
    (1, -1, 0)
])
def test_add(a, b, expected):
    assert a + b == expected

해석:

      
  • @pytest.mark.parametrize 데코레이터로 여러 케이스를 한 번에 테스트할 수 있습니다.
  •   
  • 각 조합이 하나의 테스트로 실행되므로 코드 중복 없이 커버리지를 넓힐 수 있습니다.

2. 예외 발생 테스트

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

def test_divide_zero():
    with pytest.raises(ValueError):
        divide(10, 0)

해석:
pytest.raises()는 특정 함수에서 예외가 발생하는지 검증할 때 사용합니다.
단순하고 읽기 쉬운 구문으로 예외 처리 테스트가 가능합니다.

3. 공통 준비 작업 - fixture

@pytest.fixture
def sample_data():
    return {"user": "admin", "role": "manager"}

def test_user_role(sample_data):
    assert sample_data["role"] == "manager"

해석:

      
  • @pytest.fixture는 테스트 함수에 공통 데이터를 주입합니다.
  •   
  • 테스트 환경 구성, DB 연결, 초기값 설정 등에 활용됩니다.

실무 팁과 플러그인 활용

1. 실패 테스트만 다시 실행

pytest --lf  # last failed

마지막으로 실패한 테스트만 다시 실행하여 디버깅 속도를 높일 수 있습니다.

2. 테스트 중간에 print 보기

pytest -s

print() 구문이 테스트 결과에 출력되지 않는 경우 -s 옵션을 사용하세요.
stdout 출력을 보기 위해 디버깅할 때 유용합니다.

3. 테스트 시간 측정

pip install pytest-timeout
pytest --durations=5

--durations 옵션은 가장 오래 걸린 테스트를 출력하여 속도 병목을 찾는 데 유용합니다.

4. 코드 커버리지 확인

pip install pytest-cov
pytest --cov=패키지명

pytest-cov 플러그인을 사용하면 테스트 커버리지(테스트된 코드 비율)를 확인할 수 있습니다.
CI 환경에서도 자주 사용됩니다.

5. 테스트 디렉토리 구조 추천

project/
├── app/
│   ├── __init__.py
│   └── logic.py
├── tests/
│   ├── __init__.py
│   └── test_logic.py

tests/ 디렉터리에 모든 테스트 파일을 분리해 관리하면 프로젝트 규모가 커져도 유지하기 쉽습니다. pytest는 간결한 문법과 풍부한 기능으로 파이썬 테스트의 표준으로 자리 잡았습니다. 단순한 유닛 테스트를 넘어서, 예외 처리, 파라미터 조합, 성능 측정, 커버리지 분석까지 가능한 강력한 도구입니다. 처음에는 asserttest_ 함수부터 시작해보고,
점차 fixture, parametrize, mock 등 고급 기능도 익혀보세요. 지금 여러분이 작성한 코드에 신뢰성과 품질을 더해주는 첫걸음이 될 것입니다.