실제 경과 시간이 핵심 지표야
테스트 묶음이 직렬로 30분 걸린다면, 6개의 병렬 작업으로 나누면 실제 경과 시간은 약 5분으로 줄어들어(물론 샤드마다 고정된 체크아웃과 설치 오버헤드는 추가돼). 유료 러너 요금 모델에서는 총 사용 시간은 비슷하게 들지만, 개발자는 30분 대신 5분만 기다리면 되니까.
테스트를 나누는 방법
- 디렉터리별 — 한 작업에서는
pytest tests/api/를, 다른 작업에서는pytest tests/db/를 실행해. - 마커별 —
pytest -m 'unit'과-m 'integration'을 나눠서 돌려. - 자동 샤드 —
pytest-xdist --dist=loadgroup -n 4가 단일 러너 안에서 분할하고, 매트릭스와 결합하면 러너 간에도 나눌 수 있어. - 시간 버킷별 — 테스트마다 걸리는 시간을 기록해서 비슷한 시간대끼리 묶어.
pytest-split이 이 역할을 해.
세팅할 때 주의할 점
- 각 샤드마다 따로 설치해야 해. 캐시를 적극적으로 활용해.
- 커버리지 리포트는 샤드 간에 병합해.
coverage combine을 써. - 불안정한 테스트는 샤딩하면 더 자주 터질 수 있어 — 실패한 샤드만 다시 돌려.