10月 27, 2022
python開発において、GitLab CICDでpytestを実施しテスト結果とカバレッジの確認方法をご紹介したいと思います。今回のサンプルでは、docker containerを立上げ、ほかのプロジェクトに対してpytest実行することにします。 Junitのついては「GitLabでJavaのテストレポートとカバレッジの可視化」の記事をご覧ください。
以下のように、pytest実行する前にテスト対象プロジェクトをcloneします(pj-clone)。
pytest実行するjobでは、containerを立上げ、pytestを実行しカバレッジレポートを作成します。
.gitlab-ci.yml
stages:
- pre
- test
pj-clone:
stage: pre
script:
# 対象リポジトリclone、pytest実行用のディレクトリを作成
- mkdir projects
- cd projects
- mkdir pytest
- cd pytest
- git clone https://<user>:<token>@gitlab.com/t8316/nttd/pytest-test.git
pytest:
stage: test
variables:
# GIT_CLEAN_FLAGSについては弊社「.gitlab-ci.ymlの動作原理」の記事をご参考ください
GIT_CLEAN_FLAGS: -ffdx -e projects/
script:
# pythonプロジェクトはrequirements.txtを使ってないので、pytestインストールをコマンドで実行
# coverageとpytestコマンドでテスト実行し、レポート作成
- docker run --rm -v $CI_PROJECT_DIR/projects:/projects python:3.10.7 /bin/bash -c \ cd projects/pytest && pip3 install --user --upgrade pip && pip install --user pytest pytest-cov && cd projects/pytest/pytest-test && coverage run -m --source=tests/ pytest --cov -v tests/ --junitxml=report.xml && coverage report -m
# テスト結果を画面に表示するために必要
coverage: '/(?i)total.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/'
artifacts:
when: always
reports:
junit: projects/pytest/pytest-test/report.xml
pipelin画面にTestsタブにテスト件数が表示され、クリックして次へ。
テスト実行のジョブ一覧が表示され、クリックするとテストケースの一覧が表示されます。
View detailsをクリックすると、詳細情報がポップアップで表示されます。
カバレッジの確認は、以下の画面で確認できます
pipelineのカバレッジ出力job画面
MR画面
AnalyzeのRepository画面(グラフで履歴を表示)
以上です。