หน้านี้จะช่วยให้คุณใช้ 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
รายการเดียวโดยใช้ชื่ออุปกรณ์
ดังนี้
--{device2}device-setup:disable
ในตัวอย่างนี้ device2
จะข้ามการตั้งค่าอุปกรณ์ แต่ device1
จะไม่ข้าม
TF เลือกอุปกรณ์อย่างไร
สหพันธ์การค้าจะมองหาอุปกรณ์ที่ตรงกับ 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)
หากคุณคิดว่ามี Use Case ที่น่าสนใจซึ่งควรได้รับการสนับสนุน โปรดส่งเหตุผลของคุณไปยังรายชื่ออีเมล 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
คุณควรตั้งชื่อที่สื่อความหมายมากขึ้นหากเป็นไปได้
โดยขึ้นอยู่กับประเภทของอุปกรณ์ที่คุณคาดหวังว่าจะได้รับการตั้งค่าจริงๆ