픽스처와 설정/해제
공유 테스트 상태와 리소스 설정에 픽스처를 사용합니다.
픽스처와 설정/해제은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
픽스처란 무엇입니까?
픽스처는 @pytest.fixture로 데코레이트된 함수이며 테스트 의존성을 제공합니다. pytest는 이름을 기준으로 픽스처를 주입합니다.
import pytest
@pytest.fixture
def user():
return {"name": "Alice", "age": 30}
def test_name(user):
assert user["name"] == "Alice"yield를 사용한 설정과 정리
픽스처 내부에서 픽스처 값을 yield하여 yield 이전의 설정과 이후의 정리를 분리하십시오.
import pytest
@pytest.fixture
def db_connection():
conn = create_connection() # setup
yield conn
conn.close() # teardown
def test_query(db_connection):
result = db_connection.query("SELECT 1")
assert result is not None픽스처 범위
scope로 픽스처가 생성되는 빈도를 제어합니다. function(기본값), class, module, session을 사용할 수 있습니다.
import pytest
@pytest.fixture(scope="module")
def expensive_resource():
print("\nSetup once per module")
yield object()
print("\nTeardown once per module")conftest.py를 통한 픽스처 공유
conftest.py에 픽스처를 넣으면 가져오기를 사용하지 않고 여러 테스트 파일에서 공유할 수 있습니다.
# conftest.py
import pytest
@pytest.fixture
def config():
return {"env": "test", "debug": True}
# test_app.py
def test_env(config):
assert config["env"] == "test"픽스처 종속성
픽스처는 다른 픽스처를 매개변수로 나열하여 해당 픽스처에 의존할 수 있습니다.
import pytest
@pytest.fixture
def base_url():
return "http://localhost:8000"
@pytest.fixture
def api_client(base_url):
return Client(base_url)
def test_get(api_client):
resp = api_client.get("/health")
assert resp.status_code == 200자동 적용 픽스처
autouse=True로 설정하면 픽스처를 매개변수로 나열하지 않아도 해당 범위의 모든 테스트에 적용할 수 있습니다.
import pytest
@pytest.fixture(autouse=True)
def reset_env(monkeypatch):
monkeypatch.setenv("ENVIRONMENT", "test")
def test_env():
import os
assert os.environ["ENVIRONMENT"] == "test"tmp_path 픽스처
pytest는 테스트마다 새로운 임시 디렉터리를 제공하는 내장 픽스처로 tmp_path를 제공합니다.
def test_write_file(tmp_path):
f = tmp_path / "hello.txt"
f.write_text("hello")
assert f.read_text() == "hello"monkeypatch 픽스처
monkeypatch를 사용하면 테스트 중에 속성, 환경 변수 또는 사전 항목을 일시적으로 바꿀 수 있습니다.
def get_env():
import os
return os.environ.get("MODE", "prod")
def test_mode(monkeypatch):
monkeypatch.setenv("MODE", "test")
assert get_env() == "test"capsys 픽스처
capsys는 테스트 중 stdout과 stderr 출력을 캡처합니다.
def greet(name):
print(f"Hello, {name}!")
def test_greet(capsys):
greet("Alice")
out, err = capsys.readouterr()
assert out == "Hello, Alice!\n"request.addfinalizer를 사용한 픽스처 정리
yield를 대신하는 방법으로, request.addfinalizer를 사용해 정리 작업을 등록합니다.
import pytest
@pytest.fixture
def resource(request):
r = acquire_resource()
request.addfinalizer(r.release)
return r매개변수화된 픽스처
픽스처에서 params를 사용하면 종속된 각 테스트가 매개변수 값마다 한 번씩 실행됩니다.
import pytest
@pytest.fixture(params=["sqlite", "postgres"])
def db(request):
return create_db(request.param)
def test_insert(db):
db.insert({"id": 1})
assert db.count() == 1빠른 확인
전체 테스트 세션 동안 픽스처를 한 번만 생성하는 픽스처 범위는 무엇인가요?
복습
픽스처는 yield를 통해 재사용 가능한 설정 및 정리 작업을 제공합니다. scope로 수명을 제어하고, 공유에는 conftest.py를 사용하며, 암시적으로 적용하려면 autouse=True를 사용합니다.
자주 묻는 질문
“픽스처와 설정/해제” 강의는 무료인가요?
네 — “픽스처와 설정/해제” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“픽스처와 설정/해제”에서 뭘 배우나요?
공유 테스트 상태와 리소스 설정에 픽스처를 사용합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“픽스처와 설정/해제” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.