[pydantic-ai] 로컬 테스트 성능 개선: coverage 분리와 fixture 최적화
PR 링크: pydantic/pydantic-ai#4337 상태: Merged | 변경: +10 / -9
들어가며
로컬 개발 시 테스트를 자주 실행하는데, 매번 coverage 수집이 포함되면 불필요한 오버헤드가 발생합니다. 또한 Outlines 모델 테스트에서 매 테스트마다 HuggingFace 모델을 새로 로드하는 것은 큰 비용입니다. 이 PR은 두 가지 간단한 변경으로 로컬 테스트 실행 속도를 체감 가능하게 개선합니다.
핵심 코드 분석
1. make test에서 coverage 분리
Before:
test: ## Run tests and collect coverage data
COLUMNS=150 ... coverage run -m pytest -n auto ...
@uv run coverage combine
@uv run coverage report
testcov: test ## Run tests and generate an HTML coverage report
@echo "building coverage html"
@uv run coverage html
make test가 항상 coverage run -m pytest로 실행되어 coverage 계측 오버헤드가 있었고, testcov는 test에 의존하여 중복 실행되었습니다.
After:
test: ## Run tests without coverage (fast, for local dev)
COLUMNS=150 ... pytest -n auto ...
testcov: ## Run tests with coverage and generate an HTML report
COLUMNS=150 ... coverage run -m pytest -n auto ...
@uv run coverage combine
@uv run coverage report
@echo "building coverage html"
@uv run coverage html
make test는 순수 pytest만 실행하여 빠르게, make testcov는 coverage와 HTML 리포트를 한번에 생성합니다.
2. Outlines 모델 fixture scope 변경
Before:
@pytest.fixture
def transformers_model() -> OutlinesModel:
hf_model = transformers.AutoModelForCausalLM.from_pretrained(...)
After:
@pytest.fixture(scope='module')
def transformers_model() -> OutlinesModel:
hf_model = transformers.AutoModelForCausalLM.from_pretrained(...)
transformers_model, transformers_multimodal_model, llamacpp_model 세 fixture 모두 scope='module'로 변경되어 모듈 내에서 한 번만 모델을 로드합니다.
3. xdist_group 제거
-@pytest.mark.xdist_group(name='doc_tests')
@pytest.mark.filterwarnings(...)
doc_tests 그룹 제약이 제거되어 pytest-xdist가 더 효율적으로 작업을 분배할 수 있게 되었습니다.
왜 이게 좋은가
coverage 계측은 일반적으로 10~30%의 오버헤드를 추가합니다. 로컬 개발 루프에서 이를 제거하면 피드백 속도가 즉시 개선됩니다. HuggingFace 모델 로딩은 수 초가 걸리는 I/O 바운드 작업이므로, module-scope fixture 전환만으로도 테스트 모듈당 수 초를 절약할 수 있습니다. 작은 변경이지만 일상적인 개발자 경험(DX)에 체감 가능한 차이를 만드는 좋은 사례입니다.
정리
| 항목 | 내용 |
|---|---|
| make test | coverage 없이 순수 pytest 실행 (빠른 로컬 개발용) |
| make testcov | coverage + HTML 리포트 (CI/리포트용) |
| fixture | module-scope로 모델 로딩 횟수 감소 |
참고 자료
⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [Loki] Bloom Filter로 ExceedsLimits 요청의 백엔드 트래픽 대폭 감소
- 현재글 : [pydantic-ai] 로컬 테스트 성능 개선: coverage 분리와 fixture 최적화
- 다음글 [triton] AMD 백엔드에서 Floating-Point Sanitizer(FPSan) 지원 활성화
댓글