此頁面可幫助您在測試期間將 Trade Federation 測試工具與多個設備一起使用。您應該首先熟悉端到端示例中描述的正常用法。
多個設備有什麼不同?
在 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 如何準備設備?
多設備的準備步驟與單設備的準備步驟基本相同。每個設備都是通過調用<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) 藍牙連接兩個設備 (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 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
;如果可能,您應該根據您真正期望設置的設備類型給出更具描述性的名稱。