InfoQ ホームページ ニュース AWS CodeBuildが並列テスト実行を追加してCIを高速化
AWS CodeBuildが並列テスト実行を追加してCIを高速化
2025年4月28日 読了時間 4 分
翻訳者
AWSは、フルマネージド継続的インテグレーションサービスであるAWS CodeBuildにおいて、並列テスト実行機能が利用可能になったことを発表した。この新機能は、複数のビルドコンピュート環境でテストスイートを同時に実行できるため、ビルド時間を大幅に短縮すると同社は述べている。
今回の発表は、プロジェクトの複雑化に伴い、継続的インテグレーション(CI)パイプラインにおけるテスト実行時間の長期化という課題が増大していることを浮き彫りにしている。このような長いサイクルは、機能提供を遅らせ、開発者の生産性を妨げ、コストを増加させる可能性がある。
Thomas Fernandez氏は、Semaphoreブログ記事で並列テストについて次のように述べている。
並列テストは、待ち時間を減らしながらより多くの作業を可能にします。常に迅速なフィードバックループを確立できるよう、鋭敏で準備の整った状態を保つために不可欠なツールです。
CodeBuildの並列テスト実行機能により、開発者はビルドプロセスを構成してテストスイートを分割し、複数の独立したビルドノードで並列実行可能になった。CodeBuildは、現在のノードとノードの総数を識別する環境変数を提供し、インテリジェントなテスト分散を可能にする。この機能は、以下の2つの主要な戦略を持つシャーディングアプローチをサポートする。
- 均等分散:テストファイルをアルファベット順にソートし、並列環境に均等に分散する。
- 安定性:一貫性のあるハッシュアルゴリズムを使用し、テストファイルが追加または削除されても、ファイルからシャードへの割り当てを維持する。
並列テストを有効にするには、開発者はbuildspec.xmlファイルのbatch fanoutセクションを設定し、希望する並列レベルを指定する。プレインストールされたcodebuild-tests-runユーティリティがビルドステップで使用され、選択された戦略に基づいてテストの実行とシャーディングを管理する。Linuxプラットフォーム上でのCucumberによる並列テスト実行を示すbuildspec.ymlのサンプルは以下の通りである。
version: 0.2batch: fast-fail: false build-fanout: parallelism: 5 ignore-failure: falsephases: install: commands: - echo 'Installing Ruby dependencies' - gem install bundler - bundle install pre_build: commands: - echo 'prebuild' build: commands: - echo 'Running Cucumber Tests' - cucumber --init - | codebuild-tests-run --test-command "cucumber" --files-search "codebuild-glob-search '**/*.feature'" post_build: commands: - echo "Test execution completed"
CodeBuildでは、並列実行されたテストレポートを1つの統合テストサマリーに自動的にマージできる。これは、CodeBuildコンソール、AWS CLI、または他のレポートツールとの統合を通じて、集約された合格/不合格ステータス、テスト期間、失敗の詳細を提供し、結果分析を簡素化する。
(出典:AWSドキュメント)
この機能に関するAWSのブログ記事で紹介されたデモでは、1,800件のテストを持つPythonプロジェクトを10台の並列コンピュート環境で実行した場合、総テスト時間が35分から6分(環境のプロビジョニングを含む)に短縮されたことが示された。
AWSのプリンシパルデベロッパーアドボケイトSébastien Stormacq氏はこう述べている。
デモプロジェクトの1,800件のテストは、それぞれ1秒で完了します。このテストスイートを順次実行すると、完了までに35分かかりました。このテストスイートを10台のコンピュート環境で並列実行すると、環境のプロビジョニング時間を含めて6分で完了しました。並列実行に要した時間は、逐次実行の17.9%でした。
この新機能はすべてのテストフレームワークと互換性があり、AWSのドキュメントには、Django、Elixir、Go、Java(Maven)、Javascript(Jest)、Kotlin、PHPUnit、Pytest、Ruby(Cucumber)、Ruby(RSpec)といった一般的な言語やフレームワークの例が記載されている。テストファイルのリストに特定の要件があるフレームワークのために、CodeBuildは、現在のシャードのテストファイルの改行で区切られたリストを含む、CODEBUILD_CURRENT_SHARD_FILES 環境変数を提供する。
AWS CodeBuildでの並列テスト実行機能は、CodeBuildが提供されているすべてのAWSリージョンで、オンデマンド、リザーブドキャパシティ、AWS Lambdaコンピュートという3つのコンピュートモードすべてで、使用リソースに対する標準のCodeBuild価格以上の追加コストなしで利用できる。
このコンテンツのトピックは Cloud です。
関連記事:
-
関連記事
-
関連スポンサーコンテンツ
特集コンテンツ一覧
InfoQ ニュースレター
毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。 サンプルを見る