django でカバレッジを確認する方法
coverage.py を使用することで確認できる.
とりあえずインストール
pip install coverage
djangoでテストを書いている前提で進める.
テストの書き方は下記を参考にすると良い
通常は以下のように実行してテストを行うと思う
python3 manage.py test
カバレッジを取得するときは,
coverage run --source='.' manage.py test
これでカレントディレクトリ以下のファイルはすべて対象にしてカバレッジを取得する.
カバレッジを確認するには,
coverage report
で確認可能
ここでCodecov の連携は以下のサイトから GitHub と連携しておく必要がある.
これを登録すると settings から "CODECOV_TOKEN" という鍵が取得できるため
予めGitHubのSecretに登録しておく.
使用するdocker comopose ファイルは以下のようになる.
今回coverage サービスしか記載していないが本来はいくつかサービスがある.
自分の環境に合わせて追加してください.
(DBとか)
docker-compose.yaml
version: "3.3"
services:
coverage:
build:
context: .
dockerfile: Dockerfile
environment:
- REDIS_URL=redis://redis:6379
- OPENAI_API_KEY=${OPENAI_API_KEY}
- DATABASE_URL=postgres://user:password@db:5432/db
- DJANGO_DEBUG=True
- CODECOV_TOKEN=${CODECOV_TOKEN}
command: bash -c "coverage run --source='.' manage.py test &&
coverage xml &&
codecov -f coverage.xml"
volumes:
- .:/code
上記で参照している Dockerfile
Dockerfile
# DockerのPython公式イメージをベースにする
FROM python:3.10
# 環境変数の設定
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# 作業ディレクトリを作成
WORKDIR /code
# requirements.txtをコピー
COPY requirements.txt /code/
# 必要なパッケージのインストール
RUN pip install --upgrade pip && pip install -r requirements.txt
そして.github/workflowsディレクトリにcoverageを取得するワークフローファイルを置く
coverage.yaml
name: Coverage
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
- name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: run coverage
run: |
docker-compose -f docker-compose-coverage.yaml up --build --exit-code-from coverage
これで自動的にcodecovにカバレッジがアップロードされる.
バッジの追加
これが一番やりたかったこと
Codecovの対象となるリポジトリページに有る Settings -> Badges & Graphs からCodecov Badgeの部分を自分のリポジトリの README.md に貼り付けるとカバレッジ率が確認できる.
参考文献