Pytest 테스트 프레임워크 개요
Pytest는 Python용 단위 테스트, 통합 테스트, 기능 테스트를 위한 오픈소스 프레임워크로 간결성과 확장성을 특징으로 합니다.
주요 기능
- 직관적인 API로 테스트 케이스 작성 용이
- 함수형/클래스형/파라미터화/Fixture 테스트 지원
- 플러그인 시스템을 통한 기능 확장
- 다양한 형태의 테스트 보고서 생성
설치 방법
pip install pytest
기본 사용법
테스트 함수 작성 및 실행:
# 계산기 테스트 모듈
def test_덧셈():
"""덧셈 연산 검증"""
결과 = 3 + 5
assert 결과 == 8, f"오류 발생: {결과} != 8"
테스트 실행 명령:
pytest 계산기_테스트.py
테스트 환경 설정
def 테스트_전처리():
print("테스트 준비 시작")
def 테스트_후처리():
print("테스트 정리 완료")
def test_예제():
"""환경 설정 테스트"""
assert True
파라미터화 테스트
import pytest
연산_데이터 = [(2, 3, 5), (0, 0, 0), (-1, 5, 4)]
@pytest.mark.parametrize("x,y,기대값", 연산_데이터)
def test_더하기(x, y, 기대값):
"""다양한 입력값 테스트"""
assert x + y == 기대값
테스트 제어
@pytest.mark.skip("구현 예정")
def test_미구현():
pass
@pytest.mark.xfail(reason="의도적 실패 테스트")
def test_실패_예상():
assert 10 * 2 == 15
명령어 옵션
테스트 선택
pytest 테스트_모듈.py::테스트_함수: 특정 테스트 실행pytest -k "패턴": 이름 기반 필터링pytest -m "태그": 마커 기반 필터링
보고서 설정
pytest -v: 상세 출력pytest -s: 콘솔 출력 활성화pytest --durations=5: 상위 5개 느린 테스트 표시
고급 기능
훅(Hook) 시스템
테스트 라이프사이클 커스터마이징:
def pytest_addoption(파서):
"""사용자 정의 명령어 추가"""
파서.addoption("--이메일전송", action="store_true", help="테스트 후 이메일 발송")
def pytest_terminal_summary(리포터):
"""터미널 요약 후 동작"""
if 리포터.config.getoption("--이메일전송"):
print("테스트 보고서 이메일 전송")
Fixture 시스템
@pytest.fixture(scope="module")
def 데이터베이스():
"""모듈 단위 데이터베이스 연결"""
db = 데이터베이스_연결()
yield db
db.연결해제()
def test_데이터조회(데이터베이스):
"""Fixture 의존성 테스트"""
결과 = 데이터베이스.쿼리실행("SELECT * FROM 사용자")
assert len(결과) > 0
동적 파라미터화
@pytest.fixture(params=[10, 20, 30])
def 샘플_데이터(요청):
return 요청.param
def test_동적_입력(샘플_데이터):
assert 샘플_데이터 > 0
플러그인 개발
사용자 정의 마커 구현 예시:
# setup.py
entry_points={'pytest11': ['pytest-사용자정의 = 사용자플러그인']}
# plugin.py
def pytest_configure(설정):
설정.addinivalue_line("markers", "담당자: 테스트 담당자 지정")