หน้านี้จะช่วยให้คุณใช้ Trade Federation Test Harness กับอุปกรณ์หลายเครื่อง ระหว่างการทดสอบ โดยคุณควรทำความคุ้นเคยกับการใช้งานปกติก่อนตามที่อธิบายไว้ ในตัวอย่าง แบบครบวงจร
ความแตกต่างเมื่อใช้อุปกรณ์หลายเครื่อง
การกำหนดค่าและการทดสอบอุปกรณ์หลายเครื่องใน Trade Federation มีความแตกต่างกันหลายประการ โดยเฉพาะอย่างยิ่งในเรื่องต่อไปนี้
การกำหนดค่าอุปกรณ์เครื่องเดียวที่มีอยู่จะใช้ได้กับโหมดหลายอุปกรณ์
<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>
การกำหนดค่าอุปกรณ์หลายเครื่อง
เอกสารนี้ถือว่าคุณคุ้นเคยกับการกำหนดค่าการทดสอบ 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>ไม่เช่นนั้นระบบจะแสดงข้อยกเว้น- แอตทริบิวต์
nameสำหรับ<device>เป็นแอตทริบิวต์ที่จำเป็นและควรไม่ซ้ำกันในอุปกรณ์ทั้งหมดที่อยู่ในการกำหนดค่า โดยใช้เพื่ออ้างอิงอุปกรณ์เฉพาะที่เชื่อมโยงกับแอตทริบิวต์ดังกล่าว ซึ่งจะช่วยให้การทดสอบกำหนดเป้าหมายไปยังอุปกรณ์เฉพาะได้ <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
อีกทางเลือกหนึ่งคือ <pre_multi_target_preparer> ซึ่งจะทำงาน ก่อน ขั้นตอน
target_preparer
- ควรใช้
<pre_multi_target_preparer>สำหรับการตั้งค่าที่ ต้อง ทำ ก่อนการตั้งค่าอุปกรณ์แต่ละเครื่อง - ควรใช้
<multi_target_preparer>สำหรับการตั้งค่าที่ต้องทำหลังจากการตั้งค่าอุปกรณ์แต่ละเครื่อง
ตัวอย่าง
แฟลชอุปกรณ์ 1 (target_preparer) แฟลชอุปกรณ์ 2 (target_preparer) บลูทูธ เชื่อมต่ออุปกรณ์ทั้ง 2 เครื่อง (multi_target_preparer)
เขียนการทดสอบหลายอุปกรณ์
เมื่อเขียนการทดสอบอุปกรณ์เครื่องเดียวแบบปกติ คุณจะใช้อินเทอร์เฟซ IDeviceTest
หากต้องการให้การทดสอบรับอุปกรณ์ที่อยู่ระหว่างการทดสอบ คุณสามารถใช้ IMultiDeviceTest หรือ IInvocationContextReceiver
IMultiDeviceTest จะแสดงแผนผังอุปกรณ์ไปยัง IBuildInfo โดยตรง ขณะที่ IInvocationContextReceiver จะแสดงบริบทที่สมบูรณ์ (อุปกรณ์, IBuildInfo และข้อมูลเมตา) ในภายหลัง
จากนั้นคุณจะใช้ API ITestDevice ปกติ ที่ TF จัดเตรียมไว้สำหรับการเขียนการทดสอบได้
ปัจจุบันยังไม่มี API สำหรับดำเนินการจากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่องหนึ่ง เช่น device1.sync(device2) หากคุณคิดว่ามีกรณีการใช้งานที่จำเป็นต้องได้รับการสนับสนุน โปรดส่งเหตุผลของคุณไปยังรายชื่อ
android-platform
ตัวอย่าง Hello World สำหรับอุปกรณ์หลายเครื่อง
เราได้เพิ่มการกำหนดค่าตัวอย่างที่คล้ายกับ Hello World:
multi-devices.xml
นอกจากนี้ ยังมีตัวอย่างการใช้งาน multi_target_preparer
HelloWorldMultiTargetPreparer
ซึ่งแสดงวิธีรับรายการอุปกรณ์และบิลด์ของอุปกรณ์
นี่คือตัวอย่างแบบเต็มที่เกี่ยวข้องกับสิ่งต่อไปนี้
- การจัดสรรอุปกรณ์ 2 เครื่อง
- การเข้าถึงอุปกรณ์ทั้ง 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 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
คุณควรจะเห็นอุปกรณ์ที่เกี่ยวข้องในการเรียกใช้แต่ละครั้ง รวมถึงอุปกรณ์ทั้งหมดที่พร้อมใช้งานและสถานะของอุปกรณ์
โปรดทราบว่าในตัวอย่างนี้ เราเรียกอุปกรณ์ 2 เครื่องในการกำหนดค่าว่า device1 และ device2 คุณควรตั้งชื่อที่สื่อความหมายมากขึ้นหากเป็นไปได้ ทั้งนี้ขึ้นอยู่กับประเภทของอุปกรณ์ที่คุณต้องการตั้งค่า