「같은 로직을 여러 입력으로 테스트」하는 패턴이 매우 자주 나옵니다.
같은 코드를 복붙하는 대신 pytest의 parametrize로 「데이터를 외부에서 주입」하면 한 함수로 다 처리 가능합니다.
기본 사용.
import pytest.
@pytest.mark.parametrize("a, b, expected", [(1, 2, 3), (5, 5, 10), (-1, 1, 0)]) def test_add(a, b, expected): assert add(a, b) == expected.
한 함수가 3번 실행 — 입력만 다른.
실행 시 명확한 표시.
pytest -v로 보면 test_add[1-2-3], test_add[5-5-10], test_add[-1-1-0] 식으로 각각의 케이스가 보임.
어느 입력에서 실패했는지 즉시 식별.
id로 가독성 향상.
@pytest.mark.parametrize("input,expected", [("hello", 5), ("안녕", 2)], ids=["english", "korean"]) — 자동 생성된 이상한 ID 대신 의미 있는 이름.
fixture와 결합.
fixture도 파라미터화 가능.
@pytest.fixture(params=["sqlite", "postgres"]) def db(request): ...
— 같은 테스트가 두 DB로 실행.
「하나의 테스트로 여러 환경 검증」 패턴.
한 줄 요약
parametrize는 같은 테스트를 여러 입력으로 반복 실행.
id로 가독성, fixture 파라미터로 환경 다중화.
테스트 코드 중복 제거의 결정타.
더 알아볼 것
- 여러 parametrize 중첩
- indirect 파라미터 — fixture 경유
- Hypothesis — 속성 기반 테스트