Code Coverage
코드 커버리지는 테스트 중에 실행되는 코드의 양을 측정한 것입니다. 테스트 스위트에 코드 적용 범위를 추가하면 테스트에서 다루지 않는 코드 영역을 찾을 수 있습니다.
Coverage.py 는 Python 기반 애플리케이션에서 코드 적용 범위를 측정하는 데 널리 사용되는 도구입니다. 이제 pytest를 사용하고 있으므로 pytest-cov를 사용하여 Coverage.py를 pytest와 통합하겠습니다 .
requirements.txt에 추가적으로 라이브러리와 버전을 작성합니다.
pytest-cov==4.1.0
`.coveragerc` 파일을 이용하여 coverage report 를 수정 할 수 있습니다. project 디렉토리에 추가해주도록 합니다.
[run]
omit = tests/*
branch = True
컨테이너를 다시 빌드하여 업데이트 해줍니다.
$ docker-compose up -d --build
coverge와 같이 테스트를 돌려 봅니다.
$ docker-compose exec web python -m pytest --cov="."
아래 결과를 볼 수 있습니다.
=============================== test session starts ===============================
platform linux -- Python 3.12.1, pytest-7.4.4, pluggy-1.3.0
rootdir: /usr/src/app
plugins: cov-4.1.0, anyio-4.2.0
collected 6 items
tests/test_ping.py . [ 16%]
tests/test_summaries.py ..... [100%]
---------- coverage: platform linux, python 3.12.1-final-0 -----------
Name Stmts Miss Branch BrPart Cover
----------------------------------------------------------
app/__init__.py 0 0 0 0 100%
app/api/__init__.py 0 0 0 0 100%
app/api/crud.py 15 0 2 0 100%
app/api/ping.py 6 0 2 0 100%
app/api/summaries.py 20 0 8 0 100%
app/config.py 12 2 2 0 86%
app/db.py 17 7 2 1 58%
app/main.py 18 3 4 0 86%
app/models/__init__.py 0 0 0 0 100%
app/models/pydantic.py 5 0 0 0 100%
app/models/tortoise.py 9 1 0 0 89%
----------------------------------------------------------
TOTAL 102 13 20 1 89%
HTML버전으로 보고 싶다면?
$ docker-compose exec web python -m pytest --cov="." --cov-report html
htmlcov 디렉토리에서 생성된 HTML을 볼 수 있습니다. 시각적으로 빠르게 판단 할 수 있어서 유용합니다.
.coverage 파일 과 함께 이 디렉터리를 .gitignore 및 .dockerignore 파일 에 추가합니다 .
Code Quality
Linting은 코드에 스타일 또는 프로그래밍 오류가 있는지 확인하는 프로세스입니다. Python에 일반적으로 사용되는 린터가 많이 있지만 우리는 Flake8을 사용하겠습니다. 왜냐하면 두 가지 인기 있는 린터인 pep8 과 pyflakes를 결합한 것이기 때문입니다 .
requirements.txt에 라이브러리를 작성해줍니다.
flake8==7.0.0
Flake8을 구성하려면 project 디렉토리에 setup.cfg 파일을 추가하여야 합니다.
[flake8]
max-line-length = 119
$ docker-compose up -d --build
$ docker-compose exec web flake8 .
오류가 발견 되었다면 로그를 확인하고 수정해주도록 합니다.
코드 포매팅을 더 수월하게 도와줄 Black을 추가해줍니다.
black==23.12.1
$ docker-compose up -d --build
$ docker-compose exec web black . --check
아래와 같은 결과를 확인 할 수 있습니다.
would reformat app/api/ping.py
would reformat app/main.py
would reformat app/api/summaries.py
would reformat tests/test_summaries.py
Oh no! 💥 💔 💥
4 files would be reformatted, 11 files would be left unchanged.
변경 사항 적용전 diff 옵션을 이용하여 실행해보겠습니다.
$ docker-compose exec web black . --diff
$ docker-compose exec web black .
그리고 `isort`라는 라이브러리가 있습니다.
자동으로 알파벳 순서로 임포트를 정리하고 그룹별로 분리해줍니다.
requirements.txt 파일에 추가해줍니다.
isort==5.13.2
check-only와 diff 옵션을 통해서 명령어 실행을 해봅니다.
$ docker-compose up -d --build
$ docker-compose exec web isort . --check-only
$ docker-compose exec web isort . --diff
변경 사항을 적용해봅니다.
$ docker-compose exec web isort .
Flake8, Black 및 isort가 모두 통과하는지 마지막으로 확인하세요.
$ docker-compose exec web flake8 .
$ docker-compose exec web black . --check
$ docker-compose exec web isort . --check-only
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
List와 Tuple의 차이 (0) | 2024.03.20 |
---|---|
FastAPI를 이용한 TDD 개발 - 7 (0) | 2024.03.19 |
FastAPI를 이용한 TDD 개발 - 6 (0) | 2024.03.14 |
FastAPI를 이용한 TDD 개발 - 5 (0) | 2024.03.14 |
FastAPI를 이용한 TDD 개발 - 4 (0) | 2024.03.14 |