Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

シャーディングを設定する

このページでは、シャーディングを介してスイート モジュール(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 にすると、空のシャードを作成しないようにできます。