自動テストがより便利に!!CodeBuildのテストレポート機能がGAされました!!

2020.05.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CX事業本部@大阪の岩田です。これまでプレビューリリースという位置づけだったCodeBuildのテストレポート機能が2020/5/22、ついにGAされました!!

早速試してみたので、簡単に紹介させて頂きます。

レポート機能とは?

CodeBuildのジョブから出力されたレポートファイルを解析し、テスト実行結果を確認するためのビューを提供する機能です。画面のイメージはこんな感じです。

レポートファイルは以下の形式に対応しています。

  • JUnit
  • Cucumber
  • TestNG
  • TRX

プレビュー段階で対応していた形式はJUnit、Cucumberのみでしたが、GA時点で新たにTestNG、TRXのサポートが追加されています。

テストレポート作成に必要な権限

テストレポートを作成するには、CodeBuildのジョブを実行するIAMロールに以下の権限が必要です。

  • codebuild:CreateReportGroup
  • codebuild:CreateReport
  • codebuild:UpdateReport
  • codebuild:BatchPutTestCases

既存のビルドプロジェクトにテストレポートを追加する場合は、忘れずに権限を追加しておいて下さい。※ちなみに私は最初に試した時権限不足で失敗しました。

テストレポートの作り方

buildspecファイルにreportsセクションを追加し、最大5つまでのレポートグループを指定します。

reportsセクションのフォーマットは以下の通りです。

reports:
  report-name-or-arn:
    files:
      - location
      - location
    base-directory: location
    discard-paths: yes | no
    file-format: JunitXml | CucumberJson | VisualStudioTrx | TestNGXml

それぞれの意味は以下の通りです。

  • report-name-or-arn

レポートグループを指定するキーで、既存のレポートグループのARN、もしくはレポートグループ名を指定します。レポートグループ名を指定した場合は、CodeBuildが自動的に <プロジェクト名>-<buildspec内でのレポートグループ名>という命名規則でレポートグループ名を付与します。ビルドプロジェクトごとに最大5つのレポートグループを持つことが可能です。

  • files

このセクションでテストレポートのファイルを指定します。後述のbase-directoryが指定されている場合はbase-directory配下から、指定されていない場合はビルドジョブを実行したディレクトリからレポートファイルを検索します。*を指定すると全てのファイルに、**を指定すると再帰的に全てのディレクトリにマッチさせることが可能です。

例えば、my-subdirectory/* と指定すると、 my-subdirectoryというディレクトリ配下の全てのファイルを、my-subdirectory/**/*と指定するとmy-subdirectoryというディレクトリから再帰的に全てのファイルを検索します。

  • base-directory

CodeBuildがレポートファイルを検索するベースのディレクトリを指定します

  • discard-paths

レポートファイルをS3にアップロードする際に、レポートファイルのパスを保持するかどうかをyes|noで指定します。たとえば、レポートファイルのパスがcom/myapp/mytests/TestResult.xmlの場合に、yesを指定すると、S3にアップされるレポートファイルはTesResult.xmlに短縮されます。デフォルト値はnoです。

  • file-format

レポートファイルの形式を指定します。未指定の場合は、デフォルトでJunitXmlを使用します。

やってみる

実際に、今関わっているプロジェクトに導入してみました。開発言語はPythonを、テスト用のライブラリにはpytestを利用しているので、buildspecは以下のように指定しました。

version: 0.2
phases:
  #略
  build:
    commands:
      - pipenv run python -m pytest tests/unit --junit-xml=reports/unittest_results.xml
reports:
  unittest-rep-group:
    files:
      - '**/*'
    base-directory: reports/

buildspecを更新後にビルドするとレポートが作成されています。

レポート履歴のリンクを開くと詳細が表示され、各テストケースの詳細を確認することができます。

せっかくなので別のプロジェクトを作成して、わざとテストを失敗させてみました。テスト1件成功、1件失敗の場合は以下のような表示になります。

失敗したテストケースtest_failのリンクをクリックするとダイアログが開き、どの部分でテストが失敗したのか詳細を確認することができます。

まとめ

CodeBuildのテストレポート機能についてご紹介しました。これまではテストが失敗した場合はCloudWatch Logsのログを確認して失敗箇所を特定していましたが、今後はテストレポートを活用することで、失敗箇所が簡単に特定できそうです。偉い人からテストエビデンスの提出を要求された時なんかも便利そうですね。うまく活用して開発作業をスピードアップしていきたいと思います。

参考