此頁面可協助您在測試期間將 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
步驟之後運行。
另一種方法是在target_preparer
步驟之前執行的<pre_multi_target_preparer>
。
-
<pre_multi_target_preparer>
應用於必須在單一裝置設定之前完成的設定。 -
<multi_target_preparer>
應用於必須在單一裝置設定之後完成的設定。
例如:
快閃記憶體裝置 1 (target_preparer) 快閃記憶體裝置 2 (target_preparer) 藍牙連接兩個裝置 (multi_target_preparer)
編寫多設備測試
在編寫常規單設備測試時,您需要實作IDeviceTest介面。
對於接收被測設備的測試,您可以實作IMultiDeviceTest或IInitationContextReceiver 。
IMultiDeviceTest 為您提供裝置到其IBuildInfo的直接映射,而 IInitationContextReceiver 稍後為您提供完整的上下文(裝置、IBuildInfo 和元資料)。
然後,您將能夠使用 TF 提供的常用ITestDevice API 進行測試編寫。
尚不存在可從一台裝置向另一台裝置執行操作的 API,例如device1.sync(device2)
。如果您認為您有一個令人信服的用例需要支持,請將您的理由發送到android 平台列表。
多設備 hello world 範例
我們新增了一個類似 Hello World 的範例設定: multi-devices.xml還有一個multi_target_preparer
實作HelloWorldMultiTargetPreparer的範例,它顯示如何接收裝置清單及其版本。
這是一個完整的範例,涉及:
- 分配兩個設備
- 透過
multi_target_preparer
存取兩個設備 - 運行使用兩個設備的測試
建置 Tradefed 後,您可以在 TF shell 中使用以下命令:
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
;如果可能的話,您應該根據您真正希望設定的設備類型給出更具描述性的名稱。