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

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