PHpullh

PYTHON · 테스트

fixture 활용

pytest fixture로 테스트 전후 설정과 정리를 구조화합니다.

테스트중급fixturepytest설정teardown

핵심 설명

pytest fixture로 테스트 전후 설정과 정리를 구조화합니다.

Python code

import pytest

# 기본 fixture
@pytest.fixture
def sample_users():
    return [
        {"name": "Alice", "age": 30},
        {"name": "Bob", "age": 25},
    ]

def test_user_count(sample_users):
    assert len(sample_users) == 2

def test_user_name(sample_users):
    assert sample_users[0]["name"] == "Alice"

# Setup / Teardown (yield fixture)
@pytest.fixture
def database():
    db = {"connected": True, "data": []}
    print("\n  DB 연결")
    yield db
    print("  DB 해제")
    db["connected"] = False

def test_insert(database):
    database["data"].append("item1")
    assert len(database["data"]) == 1

# fixture 스코프
@pytest.fixture(scope="module")
def expensive_resource():
    print("\n  [모듈] 비싼 리소스 생성")
    return {"ready": True}

# 파라미터화된 fixture
@pytest.fixture(params=["sqlite", "postgres", "mysql"])
def db_engine(request):
    return {"engine": request.param}

def test_engine(db_engine):
    assert "engine" in db_engine

# conftest.py에 공유 fixture 정의
# 파일: conftest.py
# @pytest.fixture(autouse=True)
# def reset_state():
#     yield
#     # 테스트 후 상태 초기화
print("fixture 패턴 준비 완료")

학습 팁

conftest.py에 fixture를 정의하면 같은 디렉터리와 하위 디렉터리의 모든 테스트에서 자동으로 사용 가능합니다.

주의할 점

scope="session" fixture에서 mutable 데이터를 공유하면 테스트 간 간섭이 발생합니다.

자주 묻는 질문

fixture 활용란 무엇인가요?

pytest fixture 로 테스트 전후 설정과 정리를 구조화합니다.

fixture 활용 학습 시 주의할 점은 무엇인가요?

scope="session" fixture에서 mutable 데이터를 공유하면 테스트 간 간섭이 발생합니다.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.