Fastapi
Chapter 2-2 Coverage 설치 및 테스트 커버리지 가이드
Chansman
2025. 5. 23. 10:31
📊 Coverage 설치 및 테스트 커버리지 가이드
🛠️ Coverage 설치
poetry add --group=dev coverage==7.6.9
❓ Coverage란 무엇인가?
- 단위 테스트의 품질을 측정하는 도구입니다.
- 커버리지 없는 테스트는 반쪽짜리 테스트입니다.
- 테스트 중에 실제로 실행된 제품 코드의 비율을 측정합니다.
수식 정의:
Coverage = (테스트 도중 한 번이라도 실행된 제품 코드 라인 수) / (전체 제품 코드 라인 수)
🧪 예제: coverage 측정 실습
temp.py
def add(a: int, b: int) -> int:
return a + b
def mul(a: int, b: int) -> int:
return a * b
def test_add() -> None:
a, b = 1, 1
result = add(a, b)
assert result == 2
실행 명령어
poetry run coverage run -m pytest temp.py
poetry run coverage report -m
📋 출력 예시:
Name Stmts Miss Cover Missing
---------------------------------------
temp.py 8 1 88% 6
TOTAL 8 1 88%
✅ mul() 함수가 실행되지 않았으므로 라인 6이 miss로 표시됨
🧼 테스트 코드 제외 (omit 설정)
테스트 코드는 항상 실행되므로 커버리지에 포함되면 실제 품질을 왜곡시킵니다. 이를 제외하려면 pyproject.toml에 다음 설정 추가:
[tool.coverage.run]
omit = ["*/test_*.py"]
🔄 테스트 코드와 제품 코드 분리
temp.py
def add(a: int, b: int) -> int:
return a + b
def mul(a: int, b: int) -> int:
return a * b
test_temp.py
from temp import add
def test_add() -> None:
a, b = 1, 1
result = add(a, b)
assert result == 2
실행 명령어
poetry run coverage run -m pytest test_temp.py
poetry run coverage report -m
📋 출력 예시:
Name Stmts Miss Cover Missing
---------------------------------------
temp.py 4 1 75% 6
TOTAL 4 1 75%
➡️ 이제 테스트 코드가 제외되어 정확한 coverage가 측정됨
🌐 HTML 커버리지 보고서
poetry run coverage html
- htmlcov/index.html 경로에서 시각적으로 보고서 확인 가능
✅ 정리
- ✅ 단위 테스트만 실행해서는 검증되지 않은 코드가 있는지 알 수 없음
- ✅ 커버리지를 통해 검증되지 않은 영역 식별 가능
- ✅ 테스트 코드 제외 설정 필수 (omit)
- ✅ 실행 명령어:
- poetry run coverage run -m pytest .
- poetry run coverage report -m
- poetry run coverage html
커버리지는 '무엇을 테스트했는가'를 넘어 '무엇을 테스트하지 않았는가'를 알려주는 도구입니다.