실패를 찾으려고 원시 로그를 읽지 마
CI의 기본 테스트 출력은 그저 콘솔에 쌓인 텍스트 덩어리일 뿐이야. 진짜 테스트 리포팅은 구조화된 데이터를 다뤄. 뭐가 통과했고, 뭐가 실패했고, 각각 얼마나 걸렸고, 어디서 깨졌는지 추출해서 PR이나 실행 요약에 올리는 거지.
두 가지 계층
1) 테스트 결과 포맷
- JUnit XML — 범용 포맷.
pytest --junitxml=report.xml,vitest --reporter=junit등이 있어. - SARIF — 보안 스캐너용이며 PR 리뷰 UI에 표시돼.
- Cobertura / lcov — 커버리지 포맷이야.
2) 렌더러
- GitHub Step Summary — 어떤 단계에서든
$GITHUB_STEP_SUMMARY에 마크다운을 추가하면 실행 페이지에 렌더링돼. - PR 코멘트 —
EnricoMi/publish-unit-test-result-action같은 서드파티 액션이 테스트 실행 요약을 고정 코멘트로 남겨. - 커버리지 배지 — Codecov나 Coveralls로 푸시하면, 해당 액션도 PR에 코멘트를 달아줘.
- 주석(Annotation) — 단계에서
::error file=foo.py,line=12::message를 내보내면 GitHub가 PR diff에 인라인 주석을 그려줘.