テストシャーディング
テストシャーディングとは、自動テストの大規模なスイートを小さな単位(シャード)に分割し、異なるランナー上で並列実行できるようにするプロセスです。これにより、変更に対するフィードバックを開発者に提供するまでの時間を大幅に短縮し、集中力を保ちながら素早く反復作業を行えるようになります。
Bitriseはプロジェクトの種類や、シャーディングの最適化計算をBitriseに行わせたいかどうかに応じて、すぐに使える簡単なテストシャーディング最適化機能を提供します。
| Project type | Sharding with your own shard optimization calculation | Sharding with shard optimization calculation provided by Bitrise |
|---|---|---|
| iOS | Parallelism | Parallelism + Xcode Test Shard Calculation Step |
| Android | Parallelism | Parallelism + Gradle Runner Step |
独自のテスト分割計算によるシャーディングClick to copy link
すでにシャーディング用の最適なテスト分割を計算する手段をお持ちの場合は、Pipelinesのparallelism機能を使ってテストシャーディングを設定できます。
Parallelismは、同じWorkflowを別々の仮想マシン上で並列実行します。必要なコピー数は、Workflowのparallelプロパティを設定することで手動で指定します。
...
workflows:
test-without-building:
depends_on: [build-for-testing]
parallel: 5
...
各コピーには、2つの新しいEnvironment Variablesが渡されます。
- $BITRISE_IO_PARALLEL_INDEX: Workflowの各コピーに割り当てられる、0から始まるインデックスです。
- $BITRISE_IO_PARALLEL_TOTAL: コピーの総数です。
これらのEnvironment Variablesを活用してテストシャーディングを実行できます。例えば、Jestの場合:
jest --shard=$((BITRISE_IO_PARALLEL_INDEX + 1))/$BITRISE_IO_PARALLEL_TOTAL
または、yarnの場合:
yarn test --ci --silent --shard=$((BITRISE_IO_PARALLEL_INDEX + 1))/$BITRISE_IO_PARALLEL_TOTAL
parallelismの設定方法について詳しくは、ガイドをご確認ください: Parallelism in Pipelines。
Bitrise Stepがテスト分割を計算するシャーディングClick to copy link
Bitrise Stepsが提供する最適化アルゴリズムに基づいて自動的にテストをシャーディングするPipelineを用意できます。これはiOSとAndroidの両方のプロジェクトでサポー トされています。
以下を行う必要があります:
- アプリのビルドとテストの両方を行うPipelineを作成します。
- シャード計算を行うStepsを、アプリをビルドするWorkflowに追加します。iOSプロジェクトの場合はXcode test shard calculation Step、Androidプロジェクトの場合はGradle Runner Stepです。
- テスト用のWorkflowの複数のコピーが並列実行されるよう、parallelismを設定します。
- iOS
- Android
-
必要なシャード数を格納する環境変数を作成します。例えばNUMBER_OF_SHARDSのようにします。
-
アプリ(Xcode)をビルドするWorkflowに、Xcode test shard calculation Stepを追加します。
-
Stepをクリックしてオプションメニューを開き、Configurationタブに移動します。
-
Product path入力欄に、新しく作成した環境変数を追加します。

-
同じWorkflowにDeploy to Bitrise.ioStepを追加します。
-
Pipeline Intermediate File Sharingの入力グループを見つけます。
-
Files to share between Pipeline Workflows入力欄に、環境変数を2つ追加します。
- BITRISE_TEST_SHARDS_PATH
- BITRISE_TEST_BUNDLE_PATH
これらは自動生成される出力変数です。

-
Pipelinesを開き、Pipeline内でテストを実行するWorkflowを見つけて、歯車アイコンをクリックしWorkflowの編集メニューを開きます。
-
Configurationタブで、Pipeline Conditionsセクションを開きます。
-
Parallel copies入力欄にNUMBER_OF_SHARDS環境変数を追加します。

parallelismの設定方法について詳しくは、Parallelism in Pipelinesをご覧ください。
-
Pipelineを開き、Pipeline conditionsセクションのParallel copies入力欄に必要なシャード数を追加します。
parallelismの設定方法について詳しくは、Parallelism in Pipelinesをご覧ください。
-
WorkflowにGradle RunnerStepを追加します。
-
Stepのオプションを開き、Configurationタブに移動します。
-
Config入力グループでGradle task to run入力欄を見つけ、次のタスクを追加します:
connectedAndroidTest \-Pandroid.testInstrumentationRunnerArguments.numShards=$BITRISE_IO_PARALLEL_TOTAL \-Pandroid.testInstrumentationRunnerArguments.shardIndex=$BITRISE_IO_PARALLEL_INDEX$BITRISE_IO_PARALLEL_TOTALと$BITRISE_IO_PARALLEL_INDEXのenvironment variablesが、各シャードに適用するテストをGradleに伝えます。
