シャーディングを構成する

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