Sandcorp샌드코프 · 웹·AI 제품 개발

새 프로젝트 받는 중 · 갱신 2026.11sandcorp.co.krGitHub

← 팁

테스트

처음 쓸 때 적재되는 것은 세션 픽스처에서 미리 읽는다

URLconf나 정의 레지스트리처럼 첫 사용 때 적재되는 비용을 「처음 쓴 시험」 하나가 혼자 지면, 빌드마다 다른 시험이 떨어진다. autouse 세션 픽스처로 앞당긴다.

시험마다 시간 예산을 두었더니, 빌드마다 서로 다른 시험 하나가 예산을 넘겨 떨어진다. 떨어진 시험을 따로 돌리면 아주 빠르다.

원인은 지연 적재다. Django URLconf는 첫 요청에서야 읽힌다. 라우터 179개의 pydantic 스키마를 만드느라 CPU 0.5초가 들었고, 정의 레지스트리를 처음 적재하는 데는 0.9초가 들었다. 이 비용을 각 워커에서 「처음 그것을 쓴 시험」이 혼자 지는데, 어느 시험이 처음이 될지는 실행마다 다르다.

적재를 시험 밖 준비 단계로 앞당긴다. autouse 세션 픽스처에서 미리 한 번 읽어 두면, 세션 픽스처는 준비 단계라 어느 시험의 예산에도 잡히지 않는다.

# conftest.py
import pytest
from django.urls import get_resolver

@pytest.fixture(scope="session", autouse=True)
def warm_urlconf():
    get_resolver().url_patterns  # 첫 요청이 질 적재 비용을 여기로 옮긴다

레지스트리처럼 여러 픽스처가 쓰는 것은 그 픽스처들이 적재용 세션 픽스처를 인자로 받게 해 순서를 분명히 한다. 같은 입력의 적재 결과를 세션 동안 기억해 다시 줄 때는, 어느 시험도 그 결과를 고치지 않았는지 세션 끝에 검사한다. 공유한 결과를 누가 고치면 시험끼리 서로 영향을 준다.

문의 →