Pytest 테스트 프레임워크 핵심 및 심화 활용법

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", "담당자: 테스트 담당자 지정")

태그: Pytest python 테스트자동화 fixture 훅함수

6월 28일 20:26에 게시됨