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 데이터를 공유하면 테스트 간 간섭이 발생합니다.