Python pytest를 이용한 테스트 자동화
소프트웨어 개발에서 테스트는 필수적인 요소입니다. 특히 프로젝트가 커질수록 테스트를 수동으로 실행하는 것은 비효율적이며 오류가 발생하기 쉽습니다. Python에서 테스트 자동화를 구현하는 대표적인 도구로 pytest
가 있습니다. 이 글에서는 pytest의 기본 사용법부터 고급 기능까지 살펴보고, 실제 코드 예제와 함께 테스트 자동화를 설정하는 방법을 알아보겠습니다.
pytest란 무엇인가?
pytest
는 Python에서 가장 널리 사용되는 테스트 프레임워크 중 하나로, 간결하면서도 강력한 테스트 기능을 제공합니다. 다음은 pytest의 주요 특징입니다:
- 간단한 문법
- 뛰어난 확장성 (플러그인 지원)
- 다양한 테스트 유형 지원 (단위 테스트, 기능 테스트 등)
- 상세한 테스트 보고서 제공
설치를 위해 다음 명령어를 실행하세요:
pip install pytest
1. pytest 기본 사용법
테스트 함수 작성하기
pytest에서 테스트 함수는 test_
로 시작하는 함수입니다. 다음은 간단한 예제입니다:
# math_functions.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
테스트 코드 작성:
# test_math_functions.py
from math_functions import add, subtract
def test_add():
assert add(2, 3) == 5
assert add(-1, 1) == 0
def test_subtract():
assert subtract(5, 3) == 2
assert subtract(0, 1) == -1
테스트 실행하기
다음 명령어를 사용해 테스트를 실행할 수 있습니다:
pytest
결과:
======================== test session starts ========================
collected 2 items
test_math_functions.py .. [100%]
========================= 2 passed in 0.02s =========================
2. pytest의 고급 기능
2.1 파라미터화된 테스트
pytest는 동일한 테스트 함수를 다양한 입력값으로 실행할 수 있도록 파라미터화를 지원합니다:
import pytest
@pytest.mark.parametrize("a, b, expected", [
(1, 2, 3),
(0, 0, 0),
(-1, -1, -2),
])
def test_add(a, b, expected):
from math_functions import add
assert add(a, b) == expected
2.2 예외 처리 테스트
특정 함수가 올바르게 예외를 발생시키는지 테스트하려면 pytest.raises
를 사용합니다:
import pytest
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
def test_divide():
with pytest.raises(ValueError, match="Cannot divide by zero"):
divide(1, 0)
2.3 테스트 픽스처
테스트에서 반복적으로 사용되는 설정을 픽스처(fixture)로 정의할 수 있습니다:
import pytest
@pytest.fixture
def sample_data():
return {"name": "John", "age": 30}
def test_sample_data(sample_data):
assert sample_data["name"] == "John"
assert sample_data["age"] == 30
2.4 커스텀 마커
테스트를 그룹화하거나 특정 조건에서 실행하도록 커스텀 마커를 추가할 수 있습니다:
import pytest
@pytest.mark.slow
def test_slow_function():
import time
time.sleep(5)
assert True
실행 시 특정 마커를 포함한 테스트만 실행하려면 다음 명령어를 사용합니다:
pytest -m slow
3. 실제 프로젝트에서 pytest 사용
3.1 디렉토리 구조 설계
테스트 파일은 일반적으로 프로젝트의 루트 디렉토리에 위치한 tests/
폴더에 저장합니다:
project/
├── math_functions.py
├── tests/
│ ├── __init__.py
│ ├── test_math_functions.py
4. pytest 플러그인
pytest의 강력함은 플러그인을 통해 확장됩니다. 다음은 인기 있는 플러그인들입니다:
- pytest-cov: 테스트 코드 커버리지 확인
pip install pytest-cov pytest --cov=.
- pytest-django: Django 프로젝트 테스트 지원
- pytest-mock: 테스트에서 mock 객체 사용
5. 마무리
pytest는 Python 테스트 자동화를 위한 강력하고 유연한 도구입니다. 기본적인 사용법부터 고급 기능과 플러그인 활용까지, pytest를 사용하면 테스트를 효과적으로 관리하고 프로젝트의 품질을 높일 수 있습니다. 이 글에서 소개한 내용을 바탕으로 자신의 프로젝트에 pytest를 적용해 보세요!
'Python > Python 심화' 카테고리의 다른 글
Python unittest를 이용한 단위 테스트 작성 (0) | 2025.08.17 |
---|---|
Python 작업 스케줄링 (0) | 2025.08.16 |
Python 이메일 전송 스크립트 작성하기 (0) | 2025.08.15 |
Python 파일 및 폴더 관리 자동화 (0) | 2025.08.14 |
Python 브라우저 자동화를 위한 Selenium 사용 (0) | 2025.08.13 |