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

マルチデバイスのテストの実行

このページは、テストでマルチデバイスの Trade Federation テストハーネスを使用するために役立ちます。エンドツーエンドの例で説明されている通常の使用方法を熟知していることが前提となります。

複数デバイスの相違点

Trade Federation でのマルチデバイス テストの構成と実行は、特に以下の点が通常と異なります。

既存のデバイス構成はすべて、マルチデバイス モードに対して有効です。

行なうこと: シングル デバイスのユースケースは、2 行目のセンテンスのマルチデバイス モードに関連するため、シングル デバイスのユースケースを追加して、直前のセンテンスを明確化します。

マルチデバイスの構成

このドキュメントは、一般的な TF テストの構成を熟知していることを前提としています。以下は、2 つのデバイスを使用した一般的なテスト構成を示しています。

<configuration description="A simple multi-devices example in Tradefed">

        <device name="device1">
            <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
        </device>

        <device name="device2">
            <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
        </device>

        <option name="log-level" value="verbose" />
        <test class="com.android.tradefed.HelloWorldMultiDevices" />

        <logger class="com.android.tradefed.log.FileLogger" />
        <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />

    </configuration>
    

構造に関して、言及すべき点がいくつかあります。

  • 必要となるデバイスごとに、<device> が期待されています。
  • <build_provider><target_preparer><device_recovery><device_requirements>、必要に応じて <device_options><device>タグに含まれていなければなりません。例外はスローされます。
  • <device>name 属性は必須であり、構成内のすべてのデバイス間で一意である必要があります。この属性は、関連付けられた特定のデバイスを参照するために使用されます。この属性により、特定のデバイスをターゲットとしてテストが実行できるようになります。
  • <option> に関しては、構成のルートでグローバル スコープを指定するか、<device> タグ内で指定することで、デバイス スコープに限定できます。

シングル デバイス構成に適用されるその他のルールは、マルチデバイスでも適用されます。詳しくは Hello World の例をご覧ください。

コマンドラインによるアップデート

TF コマンドラインでオプションを指定する場合は、{<device name>} を使用してデバイス スコープを指定することが可能です。この <device name> は XML 構成で指定された名前です。

上記の例では、次のオプションを使用できます。

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

以下のように、デバイス名を使用してターゲットに設定できるのは、デバイス build_provider オブジェクトのうち 1 つのみです。

--{device2}device-setup:disable

この例では、device2 はデバイス構成をスキップしますが、device1 はスキップしません。

TF によるデバイスの選択方法

Trade Federation は、device_requirements(通常はデバイスの特色、製品など)に一致するデバイスを、構成に表示される順に検索します。デバイスが割り当てられるたびに、TF は次の割り当てを試みます。すべてのデバイスを割り当てることができない場合は、割り当てられたすべてのデバイスがリリースされ、すべてのデバイスが一致したときにコマンドが再試行されます。

TF によるデバイスの準備

マルチデバイスの準備は、ほとんどの場合シングル デバイスと同じステップで行なわれます。<target_preparer> 内に表示される順に <device> が呼び出され、各デバイスが準備されます。

また、構成のルートで指定されている <multi_target_preparer> を使用して、デバイスのペア設定など、複数のデバイスを必要とする準備を行うこともできます。これは target_preparer のステップの後で実行します。

別の方法では、target_preparer のステップの前<pre_multi_target_preparer> を実行します。

  • <pre_multi_target_preparer> は、個々のデバイスの設定前に行う必要がある設定に使用します。
  • <multi_target_preparer>は、個々のデバイスの設定後に行う必要がある設定に使用します。

例: デバイス 1 をフラッシュし(target_preparer)、デバイス 2 をフラッシュして(target_preparer)、両方のデバイスを bluetooth 接続する(multi_target_preparer)

マルチデバイス テストの作成

通常のシングルデバイス テストを作成する場合は、IDeviceTest インターフェースを実装します。

テストでテスト対象デバイスを取得するには、IMultiDeviceTest または IInvocationContextReceiver のいずれかを実装します。

IMultiDeviceTest では、デバイスと IBuildInfo を直接マッピングします。IBuildInfoIInvocationContextReceiver では、後に完全なコンテキスト(デバイス、IBuildInfo、メタデータ)が提供されます。

その後、通常の ITestDevice API を使用できるようになり、TF はこの API を自由に使用してテストを作成できます。

たとえば device1.sync(device2) のような、デバイス間の操作を行うための API はまだ存在しません。サポートされるべきユースケースがあると思われる場合は、android-platform のリストに説明を添えてご報告ください。

マルチデバイスの hello world の例

Hello World のような構成例 multi-devices.xml を追加しました。また、multi_target_preparer の実装例 HelloWorldMultiTargetPreparer もあり、デバイスとそのビルドのリストを取得する方法が示されています。

この例は、以下を含む完全な例として利用できます。

  • 2 つのデバイスを割り当てる
  • multi_target_preparer を通じて両方のデバイスにアクセスする
  • 2 つのデバイスを使用するテストを実行する

Tradefed をビルドしたら、TF シェルで次のコマンドが使用できます。

run example/multi-devices

次のような出力が表示されます。

08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
    08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
    08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
    08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'
    

上記のコマンドを実行するには、2 台のデバイスを接続する必要があります。これは adb devices を使って確認できます。

呼び出し中の場合は、list ilist d を使用してシングル デバイスと同じようにモニターできます。

tf >list i
    Command Id  Exec Time  Device                          State
    1           0m:35      [00b4e73b4cbcd162, LP5A390056]  fetching build
    tf >list d
    Serial            State      Product   Variant   Build   Battery
    00b4e73b4cbcd162  Allocated  bullhead  bullhead  NRD90O  100
    LP5A390056        Allocated  shamu     shamu     NRD90I  100
    

各呼び出しに含まれるデバイス、使用可能なすべてのデバイス、およびそれらのデバイスの状態を確認できます。

この例では、この構成にある 2 つのデバイスを device1device2 と呼ぶことに注意してください。実際に設定したいデバイスのタイプに応じて、わかりやすい名前を付けてください。