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

このページは、テスト時にマルチデバイスで Trade Federation Test Harness を使用する際に役立ちます。まず、エンドツーエンドの例で説明されている通常の使用方法を把握する必要があります。

マルチデバイスの場合の相違点

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 が直接マッピングされます。IInvocationContextReceiver では、後で完全なコンテキスト情報(デバイス、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 と呼ぶことに注意してください。実際に設定したいデバイスのタイプに応じて、わかりやすい名前を付けてください。