CodeBuild で実施した pytest のコードカバレッジレポートを確認する

CodeBuild で実施した pytest のコードカバレッジレポートを確認する

はじめに

以前の記事で pytest を AWS CodeBuild に組み込み、テストレポートから何件テストを実施し何件成功したかなどが分かりました。これ以外にテストを行う場面ではコードカバレッジを確認したいという要件もあるかと思います。 CodeBuild ではコードカバレッジレポートというレポートタイプが存在し、下記の4つのフォーマットをサポートしています。

  • Clover XML
  • Cobertura XML
  • JaCoCo XML
  • SimpleCov JSON

しかし pytest のカバレッジ生成ライブラリである pytest-cov は、結果の出力形式として上記4つのいずれの形式も対応していないため、 Codebuild の画面でコードカバレッジレポートを確認することはできないようです。(方法をご存知の方がいれば教えていただけると幸いです)

そこで本記事では S3 を利用して、CodeBuild で実施した pytest のコードカバレッジレポートを確認する方法を解説します。

前回の記事はこちら

https://poota.net/archives/460

対象者

この記事は下記のような人を対象にしています。

  • CodeBuild において pytest を使用してテストを行った時のコードカバレッジレポートを確認したい人

手順

ビルドプロジェクト の作成

AWS 公式ドキュメントに従って、ビルドプロジェクトを作成します。 ソースプロバイダには CodeCommit を使用します。 buildspec.yml ファイルは以下のものを使用します。

version: 0.2

phases:
 install:
 runtime-versions:
 python: 3.7
 commands:
 - pip3 install pytest pytest-cov
 pre_build:
 commands:
 - mkdir reports
 build:
 commands:
 - python -m pytest 
 --cov=mypkg
 --cov-report html:reports/coverage 
 --cov-branch
 --junitxml=reports/pytest_results.xml
 tests

reports:
 coverage:
 files:
 - "coverage/*"
 base-directory: reports/
 discard-paths: yes
 report:
 files:
 - 'pytest_results.xml'
 base-directory: reports/
 discard-paths: yes
 file-format: JUNITXML

pytest コマンドのオプション詳細はpytest 公式ドキュメントpytest-cov 公式ドキュメント参照、その他の buildspec.yml の構文についてはCodeBuild のビルド仕様に関するリファレンス参照。 重要な点のみ補足します。

  • --cov-report html:reports/coverage によって HTML のコードカバレッジレポート出力先を指定している。
  • reports セクションではテストレポートとコードカバレッジレポートそれぞれのレポートグループを指定している。

レポートグループの作成

テストレポートとコードカバレッジレポートそれぞれのレポートグループを作成します。 CloudShell などで下記コマンドを実行してテストレポート用のレポートグループを作成します。

$ aws codebuild create-report-group \
--name pytest_project-report \
--type TEST \
--export-config '{
 "exportConfigType": "S3", 
 "s3Destination": {
 "bucket": "codebuild-output-ap-northeast-1-155385059623", 
 "path": "report", 
 "packaging": "NONE"
 }
 }'

同様にコードカバレッジレポート用のレポートグループを作成します。

$ aws codebuild create-report-group \
--name pytest_project-coverage \
--type TEST \
--export-config '{
 "exportConfigType": "S3", 
 "s3Destination": {
 "bucket": "codebuild-output-ap-northeast-1-155385059623", 
 "path": "coverage", 
 "packaging": "NONE"
 }
 }'

レポートグループを2つ作成できました。

出力結果の確認

ビルドを実行するとS3にレポートデータが出力されます。

s3に出力されたコードカバレッジレポートをダウンロードすることで、結果を確認することができました。

おわりに

本記事では S3 を利用して、CodeBuild で実施した pytest のコードカバレッジレポートを確認しました。CodeBuildのコンソール画面では pytest の結果を確認することはできませんが、この方法で(多少)楽にカバレッジレポートを確認できるのではないでしょうか。この記事がどなたかの参考になれば幸いです。

参考