หน้านี้ช่วยให้คุณใช้ชุดทดสอบของสหพันธ์การค้ากับอุปกรณ์หลายเครื่องในระหว่างการทดสอบ คุณควรทำความคุ้นเคยกับการใช้งานปกติตามที่อธิบายไว้ใน ตัวอย่างตั้งแต่ต้นจนจบ
ความแตกต่างของอุปกรณ์หลายเครื่องคืออะไร?
เมื่อกำหนดค่าและเรียกใช้การทดสอบหลายอุปกรณ์ใน Trade Federation มีหลายสิ่งที่แตกต่างออกไป โดยเฉพาะ:
การกำหนดค่าอุปกรณ์เดียวที่มีอยู่จะใช้ได้กับโหมดหลายอุปกรณ์
<! -- สิ่งที่ต้องทำ: ชี้แจงประโยคด้านบนโดยการเพิ่มตัวอย่างกรณีการใช้งานอุปกรณ์เดียวที่เกี่ยวข้องกับโหมดอุปกรณ์หลายเครื่องในประโยคที่สอง -->>
การกำหนดค่าอุปกรณ์หลายเครื่อง
เอกสารนี้ถือว่าคุณคุ้นเคยกับการกำหนดค่าการทดสอบ 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>
ข้อยกเว้นจะถูกส่งออกไปเป็นอย่างอื่น - แอตทริบิวต์
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) บลูทูธ เชื่อมต่อทั้งสองอุปกรณ์ (multi_target_preparer)
เขียนการทดสอบหลายอุปกรณ์
เมื่อเขียนการทดสอบอุปกรณ์เดียวตามปกติ คุณจะใช้อินเทอร์เฟซ IDeviceTest
สำหรับการทดสอบเพื่อรับอุปกรณ์ภายใต้การทดสอบ คุณสามารถใช้ IMultiDeviceTest หรือ IInvocationContextReceiver ได้
IMultiDeviceTest ให้แผนที่โดยตรงของอุปกรณ์ไปยัง IBuildInfo ในขณะที่ IInvocationContextReceiver จะให้บริบทที่สมบูรณ์แก่คุณในภายหลัง (อุปกรณ์ IBuildInfo และข้อมูลเมตา)
จากนั้น คุณจะสามารถใช้ ITestDevice API ตามปกติที่ TF กำหนดไว้สำหรับการเขียนทดสอบ
ยังไม่มี API เพื่อดำเนินการจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง เช่น device1.sync(device2)
หากคุณคิดว่าคุณมีกรณีการใช้งานที่น่าสนใจที่จะรองรับ โปรดส่งเหตุผลของคุณไปที่รายการ แพลตฟอร์ม Android
ตัวอย่างสวัสดีชาวโลกหลายอุปกรณ์
เราได้เพิ่มการกำหนดค่าตัวอย่างที่คล้ายกับ 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
; คุณควรตั้งชื่อที่สื่อความหมายมากขึ้นหากเป็นไปได้ ขึ้นอยู่กับประเภทของอุปกรณ์ที่คุณคาดว่าจะได้รับการตั้งค่าจริงๆ