自動テストがより便利に!!CodeBuildのテストレポート機能がGAされました!!
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のログを確認して失敗箇所を特定していましたが、今後はテストレポートを活用することで、失敗箇所が簡単に特定できそうです。偉い人からテストエビデンスの提出を要求された時なんかも便利そうですね。うまく活用して開発作業をスピードアップしていきたいと思います。