はじめに
以前の記事で pytest を AWS CodeBuild に組み込み、テストレポートから何件テストを実施し何件成功したかなどが分かりました。これ以外にテストを行う場面ではコードカバレッジを確認したいという要件もあるかと思います。
CodeBuild ではコードカバレッジレポートというレポートタイプが存在し、下記の4つのフォーマットをサポートしています。
- Clover XML
- Cobertura XML
- JaCoCo XML
- SimpleCov JSON
しかし pytest のカバレッジ生成ライブラリである pytest-cov は、結果の出力形式として上記4つのいずれの形式も対応していないため、
Codebuild の画面でコードカバレッジレポートを確認することはできないようです。(方法をご存知の方がいれば教えていただけると幸いです)
そこで本記事では S3 を利用して、CodeBuild で実施した pytest のコードカバレッジレポートを確認する方法を解説します。
前回の記事はこちら
対象者
この記事は下記のような人を対象にしています。
- 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 の結果を確認することはできませんが、この方法で(多少)楽にカバレッジレポートを確認できるのではないでしょうか。この記事がどなたかの参考になれば幸いです。
コメント