ทำการทดสอบกับอุปกรณ์หลายเครื่อง

หน้านี้ช่วยให้คุณใช้ชุดทดสอบของ 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 คุณควรตั้งชื่อที่สื่อความหมายมากขึ้นหากเป็นไปได้ โดยขึ้นอยู่กับประเภทอุปกรณ์ที่คุณต้องการตั้งค่า