このページでは、シャーディングを介してスイート モジュール(AndroidTest.xml
)を調整し、ラボでの連続実行中に最適な速度パフォーマンスを得る方法について説明します。各オプションの一般的な使用について、その根拠とともに説明します。
ラボでスイートを連続して実行する場合、全体の完了時間を短縮するために、スイートは通常複数のデバイス間でシャーディングされます。ハーネスは通常、各シャードの実行時間のバランスをとって全体的な完了時間(最後のシャードの終了時)を最小化しようとします。しかし一部のテストの性質上、必ずしも十分なイントロスペクションがあるとは限らず、モジュールのオーナーがなんらかの動作を調整する必要があります。
シャーディング可能かどうか
モジュール(AndroidTest.xml
)に <option name="not-shardable" value="true" />
というタグを付けて、シャーディング不可であることをハーネスに通知できます。
一般的なモジュールではハーネスでモジュールをシャーディングするのが正しい方法(デフォルトの動作)ですが、場合によっては、この動作をオーバーライドする必要があります。
- モジュールの設定にコストがかかる場合:
モジュールをシャーディングすると、対象のデバイスごとに、準備(APK や push ファイルなどのインストール)が 1 回実行される可能性があります。モジュールの設定に時間やコストがかかり、テスト実行時に比べて複製に値しない場合は、モジュールに not-shardable のタグを付けます。
- モジュール内のテスト数が少ない場合:
モジュールをシャーディングすると、すべてのテストケースが異なるデバイスで独立して実行される可能性があります。これは最初の項目に関連しています。テストの数が少ないと、一部のシャードでテストが 1 回しか実行されないか、まったく実行されないことがあり、準備のコストが割高になります。たとえば 1 つのテストケースに APK をインストールすることは、通常、価値がありません。
インストルメンテーション テスト: シャードの最大数
AndroidJUnitTest で実行されるインストルメンテーション テストでは、実際に APK をインストールして実行するまで、インストルメンテーションに含まれるテストの数がハーネスに対し明らかにされません。このようなオペレーションにはコストがかかり、スイートの全モジュール部分のシャーディング時に実行できません。
ハーネスがインストルメンテーション テストを過度にシャーディングし、空のシャードになる場合があります。5 つのテストがあるインストルメンテーション テストを 6 つのシャードにシャーディングした場合、1 つのテストを含むシャード 5 つと、テストを含まないシャード 1 つになります。これらのシャードがそれぞれ、コストがかかる APK のインストールを必要とします。
そのため、インストルメンテーション テスト APK のテスト数が少ない場合は、モジュールに <option name="not-shardable" value="true" />
のタグを付けることで、シャーディングする価値がないことをハーネスに通知できます。
AndroidJUnitTest
ランナーには、シャーディング可能な最大数を指定できる特別なオプション <option name="ajur-max-shard" value="5" />
があります。
これにより、呼び出しレベルでリクエストされるシャードの数に関係なく、インストルメンテーションをシャーディングできる最大回数を指定できます。デフォルトで、インストルメンテーションは、呼び出しでリクエストされたシャード数にシャーディングされます。
たとえば、インストルメンテーション テスト APK に含まれるテストケースが 2 つしかなくてもシャーディングを行う場合、ajur-max-shard
値を 2
にすると、空のシャードは作成されません。