หน้านี้ช่วยให้คุณใช้ชุดทดสอบของ Trade Federation กับอุปกรณ์หลายเครื่องได้ในระหว่างการทดสอบ ก่อนอื่นคุณควรทำความคุ้นเคยกับการใช้งานตามปกติตามที่อธิบายไว้ในตัวอย่างจากต้นทางถึงปลายทาง
การใช้อุปกรณ์หลายเครื่องมีความแตกต่างกันอย่างไร
มีหลายสิ่งที่แตกต่างออกไปเมื่อกําหนดค่าและเรียกใช้การทดสอบหลายอุปกรณ์ใน Trade Federation โดยเฉพาะสิ่งต่อไปนี้
การกำหนดค่าอุปกรณ์เครื่องเดียวที่มีอยู่จะใช้ได้กับโหมดอุปกรณ์หลายเครื่อง
<! -- TODO: ชี้แจงประโยคด้านบนโดยเพิ่มตัวอย่างกรณีการใช้งานอุปกรณ์เครื่องเดียวที่เกี่ยวข้องกับโหมดหลายอุปกรณ์ในประโยคที่ 2 -->>
การกำหนดค่าอุปกรณ์หลายเครื่อง
เอกสารนี้ถือว่าคุณคุ้นเคยกับการกําหนดค่าการทดสอบ 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 เลือกอุปกรณ์อย่างไร
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>
สำหรับการตั้งค่าที่ต้องดำเนินการหลังจากการตั้งค่าอุปกรณ์แต่ละเครื่อง
เช่น
flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (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 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'
คุณต้องมีอุปกรณ์ 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
คุณควรตั้งชื่อที่สื่อความหมายมากขึ้นหากเป็นไปได้ โดยขึ้นอยู่กับประเภทอุปกรณ์ที่คุณต้องการตั้งค่า