使用多部裝置執行測試

本頁面可協助您在測試期間,使用 Trade Federation Test Harness 與多部裝置。您應先熟悉「端對端範例」中所述的一般用法。

多部裝置有何不同?

在 Trade Federation 中設定及執行多裝置測試時,有幾項不同之處,特別是:

任何現有的單裝置設定都適用於多裝置模式。

<! -- TODO:在第二個句子中加入單一裝置用途的範例,以便說明上述句子。-->>

多裝置設定

本文件假設您已熟悉一般 TF 測試設定。以下是使用兩部裝置的典型測試設定:

<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 物件,如下所示:

--{device2}device-setup:disable

在這個範例中,device2 會略過裝置設定,而 device1 則不會。

TF 如何選取裝置?

Trade Federation 會依照裝置在設定中出現的順序,尋找與 device_requirements 相符的裝置 (通常是裝置變化版本、產品等)。每次分配裝置時,TF 都會嘗試分配下一個裝置。如果無法分配所有裝置,系統會釋出所有裝置,並在所有裝置都相符時重新嘗試指令。

TF 如何準備裝置?

多部裝置的準備步驟與單一裝置的準備步驟大致相同。系統會依照 <device> 內的顯示順序,依序呼叫 <target_preparer>,藉此準備每部裝置。

您也可以使用在設定根目錄中指定的 <multi_target_preparer>,啟用需要多部裝置的準備步驟,例如裝置配對。會在 target_preparer 步驟之後執行。

<pre_multi_target_preparer> 是另一種方法,可在 target_preparer 步驟之前執行。

  • <pre_multi_target_preparer>應用於設定,且必須在設定個別裝置前完成。
  • <multi_target_preparer> 應用於必須在個別裝置設定完成後執行的設定。

例如:

刷新裝置 1 (target_preparer) 刷新裝置 2 (target_preparer) 藍牙連線兩部裝置 (multi_target_preparer)

編寫多裝置測試

編寫一般單一裝置測試時,您會實作 IDeviceTest 介面。

如要讓測試接收測試中的裝置,您可以實作 IMultiDeviceTestIInvocationContextReceiver

IMultiDeviceTest 會直接將裝置對應至其 IBuildInfo,而 IInvocationContextReceiver 稍後會提供完整的上下文 (裝置、IBuildInfo 和中繼資料)。

接著,您就可以使用 TF 為測試編寫作業提供的常用 ITestDevice API。

目前尚未有 API 可用於從一台裝置將作業傳送至另一台裝置,例如 device1.sync(device2)。如果您認為有需要支援的必要用途,請將理由傳送至 android-platform 清單。

多裝置 Hello World 範例

我們新增了類似 Hello World 的範例設定:multi-devices.xml。此外,我們也提供 multi_target_preparer 實作 HelloWorldMultiTargetPreparer 的範例,說明如何接收裝置和其版本的清單。

以下是完整範例,涉及以下內容:

  • 正在分配兩部裝置
  • 透過 multi_target_preparer 存取兩部裝置
  • 使用兩部裝置的測試

建構 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'

您需要兩部裝置連線,才能執行上述指令。您可以透過 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

您應該可以看到每個叫用作業涉及的裝置,以及所有可用的裝置及其狀態。

請注意,在本範例中,我們在 device1device2 設定中呼叫了兩部裝置。建議您根據自己想要設定的裝置類型,盡量提供更具有描述性的名稱。