테스트 가이드
테스트는 1급 시민입니다. PR 머지 게이트는 **변경된 코드의 line coverage ≥ 80 %**와 모든 E2E 핵심 시나리오 green입니다. 이 페이지는 레이아웃, 하네스 패턴, 정적 분석으로는 못 잡는 버그를 잡는 적대적 입력 규칙을 다룹니다.
대상 독자
모든 컨트리뷰터. apps/backend/나 apps/frontend/를 건드리는 모든 PR에 적용.
Backend — pytest
테스트는 apps/backend/tests/ 아래에 있으며 세 계층으로 분리됩니다.
apps/backend/tests/
├── unit/ # 순수 함수 테스트, DB·네트워크 없음
├── integration/ # FastAPI TestClient + Postgres (testcontainers)
└── e2e/ # 백엔드 단독 블랙박스 흐름; Playwright 스위트와 다름
각 계층의 conftest.py는 적절한 fixture를 노출합니다. 최상위 conftest.py는 계층 간 공용 헬퍼(factory, time freezing)를 제공합니다.
집중된 셋만 실행
cd apps/backend
# 전체 스위트
pytest -q
# 단일 계층
pytest -q tests/unit
# 키워드로
pytest -q -k "api_key and revoke"
# 단일 테스트 + print
pytest -s tests/integration/test_api_key_endpoints.py::test_revoke_immediate