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

หน้านี้จะช่วยให้คุณใช้ 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 ของอุปกรณ์ได้เพียง 1 รายการโดยใช้ชื่ออุปกรณ์ ดังนี้

--{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> สำหรับการตั้งค่าที่ต้องทำหลังจากการตั้งค่าอุปกรณ์แต่ละเครื่อง

ตัวอย่าง

แฟลชอุปกรณ์ 1 (target_preparer) แฟลชอุปกรณ์ 2 (target_preparer) บลูทูธ เชื่อมต่ออุปกรณ์ทั้ง 2 เครื่อง (multi_target_preparer)

เขียนการทดสอบหลายอุปกรณ์

เมื่อเขียนการทดสอบอุปกรณ์เครื่องเดียวแบบปกติ คุณจะใช้อินเทอร์เฟซ IDeviceTest

หากต้องการให้การทดสอบรับอุปกรณ์ที่อยู่ระหว่างการทดสอบ คุณสามารถใช้ IMultiDeviceTest หรือ IInvocationContextReceiver

IMultiDeviceTest จะแสดงแผนผังอุปกรณ์ไปยัง IBuildInfo โดยตรง ขณะที่ IInvocationContextReceiver จะแสดงบริบทที่สมบูรณ์ (อุปกรณ์, IBuildInfo และข้อมูลเมตา) ในภายหลัง

จากนั้นคุณจะใช้ API ITestDevice ปกติ ที่ TF จัดเตรียมไว้สำหรับการเขียนการทดสอบได้

ปัจจุบันยังไม่มี API สำหรับดำเนินการจากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่องหนึ่ง เช่น device1.sync(device2) หากคุณคิดว่ามีกรณีการใช้งานที่จำเป็นต้องได้รับการสนับสนุน โปรดส่งเหตุผลของคุณไปยังรายชื่อ 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 คุณควรตั้งชื่อที่สื่อความหมายมากขึ้นหากเป็นไปได้ ทั้งนี้ขึ้นอยู่กับประเภทของอุปกรณ์ที่คุณต้องการตั้งค่า