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

AWS

はじめに

以前の記事で 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 の結果を確認することはできませんが、この方法で(多少)楽にカバレッジレポートを確認できるのではないでしょうか。この記事がどなたかの参考になれば幸いです。

参考

コメント