[アップデート] AWS CodeBuild がテスト分割と並列処理をサポートしており、並列テスト時のテストレポートマージもしてくれるようになりました
いわさです。
AWS CodeBuild 上でユニットテストを実行することは多いと思うのですが、2025 年 1 月 と 2 月の分散テストのサポートが強化されています。
まず 2025 年 1 月の次のアップデートではテストを分割して並列実行コンピューティング環境で実行ができるようになりました。
実行時のオプションでシャーディング戦略を指定することで良い感じにテストを分散して実行してくれるようになります。
これによってテスト時間の短縮が期待できます。
で、AWS CodeBuild にはテストレポートを出力することもできます。
上記に伴って分散テストが実行できるようになったのですが、レポートも分散されるようになってしまいました。
それが先日 2025 年 2 月のアップデートで分散テスト実行時にもテストレポートをマージして 1 つの統合レポートを作成してくれるようになりました。
上記 2 つのアップデートをまとめて検証してみたいと思います。
まず普通にテストしてみる
まずは普通にテストしてみます。
検証用のアプリケーション、テストコードは以下のリポジトリに作成しました。文字列結合とかしてくれるだけのあまり意味のないやつです。
以下はテストフレームワークに Pytest を使った場合の BuildSpec の公式サンプルです。
並列テストが有効化されているのですが、まずは並列 + テスト分割なしでテストしたいので batch セクションを削除します。
テスト分割もまずは使わないのでcodebuild-tests-run
コマンドのsharding-strategy
オプションも削除しておきます。
version: 0.2
phases:
install:
commands:
- echo 'Installing Python dependencies'
- apt-get update
- apt-get install -y python3 python3-pip
- pip3 install --upgrade pip
- pip3 install pytest
build:
commands:
- echo 'Running Python Tests'
- |
codebuild-tests-run \
--test-command 'python -m pytest' \
--files-search "codebuild-glob-search 'tests/test_*.py'"
post_build:
commands:
- echo "Test execution completed"
実行してみましょう。
お、テストが無事完了しました。
テストレポートを出力する
で、上記だけだと次のようにテストレポートは出力されません。
以下の公式ドキュメントに詳細は記載されていますが、reports
セクションを追加する必要があります。
また、AWS CodeBuild でサポートされているレポート形式は以下のようなので、今回は JUnit XML を出力させましょう。
- Cucumber JSON (.json)
- JUnit XML (.xml)
- NUnit XML (.xml)
- NUnit3 XML (.xml)
- TestNG XML (.xml)
- Visual Studio TRX (.trx)
- Visual Studio TRX XML (.xml)
version: 0.2
phases:
install:
commands:
- echo 'Installing Python dependencies'
- apt-get update
- apt-get install -y python3 python3-pip
- pip3 install --upgrade pip
- pip3 install pytest
build:
commands:
- echo 'Running Python Tests'
- mkdir -p test-reports
- |
codebuild-tests-run \
--test-command 'python -m pytest --junitxml=test-reports/junit.xml' \
--files-search "codebuild-glob-search 'tests/test_*.py'"
post_build:
commands:
- echo "Test execution completed"
reports:
test_reports:
files:
- "test-reports/junit.xml"
file-format: JUNITXML
artifacts:
files:
- test-reports/**/*
name: test-reports
discard-paths: false
またビルド(テスト)を実行してみると、今度はレポートが出力されました。「レポート」タブから確認が可能です。
レポートを見てみると、12件のテストが実行されオールグリーンであることが確認できます。
冒頭のサンプルリポジトリを見ていただくとわかるのですが、今回は 4 件のテストケースを 3 つのファイルに分けて実行しています。
並列テストを実行する
で、ここまでは 1 つのコンピューティングリソースでビルド&テストを実行していましたが、ここからは分散テストを CodeBuild で実行してみます。
並列テストについては以下の公式ドキュメントで解説されています。
バッチビルドを行うのですが、あわせてbatch
セクションとsharding-strategy
を追加します。
version: 0.2
batch:
fast-fail: false
build-fanout:
parallelism: 3
ignore-failure: false
phases:
install:
commands:
- echo 'Installing Python dependencies'
- apt-get update
- apt-get install -y python3 python3-pip
- pip3 install --upgrade pip
- pip3 install pytest
build:
commands:
- echo 'Running Python Tests'
- mkdir -p test-reports
- |
codebuild-tests-run \
--test-command 'python -m pytest --junitxml=test-reports/junit.xml' \
--files-search "codebuild-glob-search 'tests/test_*.py'" \
--sharding-strategy 'equal-distribution'
post_build:
commands:
- echo "Test execution completed"
reports:
test_reports:
files:
- "test-reports/junit.xml"
file-format: JUNITXML
artifacts:
files:
- test-reports/**/*
name: test-reports
discard-paths: false
バッチビルドの実行結果詳細を見てみると、複数のビルド実行が行われていることがわかります。並列実行されてます。
上記のうちのひとつのビルド実行詳細を確認してみましょう。以下は 1 つ目です。
レポートを見てみると次のように 4 件のテストがこの環境では実行されています。
次は 2 つ目のビルド実行です。こちらも 4 件実行されていますが別のテストケースが実行されていることがわかりますね。
こんな感じで複数のビルドが並列で実行され、それぞれの環境でテストファイルを分割実行していることがわかります。なるほどなぁ。
マージされた統合レポートを確認する
最後に、先日のアップデートである並列テスト実行時のマージレポートについても確認してみましょう。
バッチ実行詳細自体にもレポートタブがありまして、こちらからレポートが確認できます。
マージされて 12 件のテスト結果が確認できますね。それぞれの分散環境のレポートを手動で拾わなくて良いのでこれは便利です。
さいごに
本日は AWS CodeBuild がテスト分割と並列処理をサポートしており、並列テスト時のテストレポートマージもしてくれるようになったので一通り確認してみました。
テスト分割機能は大規模なテストを実行している場合にテスト時間の短縮が期待できる機能です。また、その弊害としてレポートが分散してしまう問題も今回のマージレポートによって解決されるようになりました。
CodeBuild のテスト実行時間でお悩みの方は是非検討してみましょう。