本頁面可協助您在測試期間,使用 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 介面。
如要讓測試接收測試中的裝置,您可以實作 IMultiDeviceTest 或 IInvocationContextReceiver。
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 i
和 list 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
您應該可以看到每個叫用作業涉及的裝置,以及所有可用的裝置及其狀態。
請注意,在本範例中,我們在 device1
和 device2
設定中呼叫了兩部裝置。建議您根據自己想要設定的裝置類型,盡量提供更具有描述性的名稱。