このページでは、シャーディングを介してスイートモジュール( AndroidTest.xml
)を調整し、ラボでの継続的な実行中に最高の速度パフォーマンスを得ることができる方法について説明します。オプションを一般的な方法で説明し、それぞれを使用する理由を説明します。
ラボでスイートを継続的に実行する場合、スイートは通常、全体的な完了時間を短縮するために複数のデバイス間でシャーディングされます。ハーネスは通常、各シャードの実行時間のバランスを取り、全体的な完了時間(最後のシャードが終了したとき)を最小限に抑えようとします。ただし、一部のテストの性質上、常に十分な内省ができるとは限らず、モジュールの所有者が動作を調整する必要があります。
シャーディング可能かシャーディング不可能か?
モジュール( AndroidTest.xml
)に<option name="not-shardable" value="true" />
タグを付けて、シャーディングしてはならないことをハーネスに通知することができます。
一般的なモジュールでは、ハーネスにモジュールをシャーディングさせる(デフォルトの動作)のが正しい方法です。ただし、場合によっては、その動作をオーバーライドする必要があります。
- モジュールのセットアップに費用がかかる場合:
モジュールをシャーディングすると、準備(APKのインストール、ファイルのプッシュなど)が、関連するデバイスごとに1回実行される可能性があります。モジュールのセットアップが長くて費用がかかり、テストのランタイムと比較して複製する価値がない場合は、モジュールにシャーディング不可のタグを付ける必要があります。
- モジュール内のテストの数が少ない場合:
モジュールをシャーディングすると、すべてのテストケースが異なるデバイスで独立して実行される可能性があります。これは最初のポイントに関連しています。テストの数が少ないと、1つのテストになるか、一部のシャードでテストが行われなくなる可能性があります。これにより、準備手順にかなりの費用がかかります。たとえば、単一のテストケースにAPKをインストールすることは、通常、価値がありません。
計装テスト:シャードの最大数?
AndroidJUnitTestを介して実行されるインストルメンテーションテストは、APKを実際にインストールして実行するまで、インストルメンテーションの一部であるテストの数をハーネスに公開しません。これらの操作はコストがかかり、スイートのすべてのモジュール部分に対してシャーディング時に実行することはできません。
ハーネスは、インストルメンテーションテストをオーバーシャーディングし、空のシャードになる可能性があります。 6つのシャードで5つのテストを使用してインストルメンテーションテストをシャーディングすると、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
にすると、空のシャードを作成しないようになります。