ไลบรารีเฟรมเวิร์กการทดสอบ SDV

หน้านี้จะแสดงภาพรวมของไลบรารีเฟรมเวิร์กการทดสอบ SDV และแนะนำวิธีตั้งค่า กำหนดค่า และดำเนินการทดสอบ ใช้เฟรมเวิร์กการทดสอบ SDV สำหรับการทดสอบตั้งแต่ต้นจนจบ เครื่องมือนี้สร้างขึ้นบน Mobly โดยคุณจะเขียนการทดสอบใน Python

เลือกวิธีการทดสอบ

ก่อนเขียนการทดสอบ ให้เลือก Test Runner ที่ตรงกับขอบเขตการยืนยันของคุณ ดังนี้

ขอบเขตการทดสอบ ประเภทโมดูล Soong เครื่องมือการดำเนินการ กรณีที่ควรใช้
Unit Test ของแพ็กเกจบริการ rust_test, rust_test_host หรือ cc_test atest ยืนยันตรรกะทางธุรกิจของ Rust หรือ C++ ที่แยกต่างหาก การแปลงข้อมูล หรือ Crate ตัวช่วยในโฮสต์หรือเครื่องเสมือน (VM) Cuttlefish เครื่องเดียว
การทดสอบระบบแบบครบวงจรและแบบหลาย VM python_test_host (เฟรมเวิร์กการทดสอบ SDV) atest หรือ CATBox ตรวจสอบการจัดการวงจรของแพ็กเกจบริการ, การสื่อสารระหว่าง VM, การเชื่อมต่อ SOME/IP หรือเป้าหมายฮาร์ดแวร์ใน VM 1-3 รายการ

ตั้งค่าสภาพแวดล้อม

หน้านี้ถือว่าคุณได้ตั้งค่าเวิร์กสเตชันสำหรับ SDV แล้ว หากต้องการทำการทดสอบเฟรมเวิร์ก ให้ติดตั้ง virtualenv

ทรัพยากร Dependency ของ Python

แนวทางที่แนะนำสำหรับการจัดการทรัพยากร Dependency ใน Android คือการแพ็กเกจการทดสอบ, Python และทรัพยากร Dependency เป็นไฟล์ปฏิบัติการโดยใช้การกำหนดค่าบิลด์ คุณต้องทำตามแนวทางนี้ในที่เก็บการทดสอบ SDV

ไลบรารีเฟรมเวิร์กการทดสอบ SDV มีทรัพยากร Dependency ต่อไปนี้โดยค่าเริ่มต้น

  • mobly
  • absl-py ต้องใช้การกำหนดพารามิเตอร์ในการทดสอบ
  • pexpect จำเป็นสำหรับฟังก์ชันการทำงานของคำสั่งแบบอินเทอร์แอกทีฟ
  • ptyprocess จำเป็นสำหรับฟังก์ชันการทำงานของคำสั่งแบบอินเทอร์แอกทีฟ

หากต้องการทรัพยากร Dependency เฉพาะสำหรับการทดสอบ ให้รวมไว้ในไฟล์ Android.bp ของการทดสอบ

python_test_host {
    …
    libs: [
        "<DEPENDENCY1>",
        "<DEPENDENCY2>",
        …
    ],
    …
}

ประเภทการทดสอบระบบ

คุณสร้างการทดสอบระบบโดยใช้เฟรมเวิร์กการทดสอบ SDV เฟรมเวิร์กจะแยกความแตกต่างระหว่างประเภทต่อไปนี้ จัดหมวดหมู่การทดสอบอย่างถูกต้อง ดังนี้

  • การทดสอบตัวอย่าง: เรียกใช้บริการตัวอย่างของ SDV และยืนยันว่าผลลัพธ์ตรงกับเอาต์พุตที่คาดไว้
  • การทดสอบ E2E: อย่าใช้บริการตัวอย่าง SDV
  • การทดสอบที่ใช้เวลานาน: ออกแบบมาสำหรับระยะเวลาการดำเนินการที่ยาวนาน
  • การทดสอบประสิทธิภาพ: ใช้ไลบรารี perfetto
  • การทดสอบฮาร์ดแวร์: ออกแบบมาเพื่อดำเนินการในอุปกรณ์จริงเท่านั้น ไม่ใช่ใน Cuttlefish (CF)

สร้างการทดสอบ

การทดสอบทั้งหมดที่เขียนโดยใช้เฟรมเวิร์กต้องอยู่ในที่เก็บการทดสอบ ตำแหน่งที่แน่นอนของการทดสอบจะขึ้นอยู่กับประเภทของการทดสอบ ดูเส้นทางไดเรกทอรี, เทมเพลตคลาสทดสอบ Python, กฎ Android.bp และหลักเกณฑ์การเขียนโค้ด Mobly ได้ที่การสร้างการทดสอบระบบ SDV

กำหนดค่าการทดสอบ

กำหนดค่าการทดสอบทั้งหมดให้ทำงานโดยใช้ทั้ง atest และ CATBox

กำหนดค่า atest

เฟรมเวิร์กนี้มีเทมเพลตสำหรับการทดสอบ VM 1, 2 และ 3 รายการ เพิ่มโค้ดต่อไปนี้ในไฟล์ Android.bp

  • One VM:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device",
    }
    
  • VM 2 รายการ

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices",
    }
    
  • VM 3 รายการ

    python_test_host {
      ...
      test_config_template: ":sdv_three_devices",
    }
    

เทมเพลตเริ่มต้นเพียงพอสำหรับการทดสอบส่วนใหญ่ หลีกเลี่ยงการสร้างการกำหนดค่าที่กำหนดเอง เว้นแต่จะมีเหตุผลที่น่าสนใจ

อัปเดตระยะหมดเวลาเริ่มต้น

ระยะหมดเวลาเริ่มต้นควรเพียงพอที่จะทำการทดสอบในเครื่อง

หากการทดสอบในเครื่องไม่สำเร็จเนื่องจากหมดเวลา ให้ลองแบ่งการทดสอบออกเป็นการทดสอบต่างๆ การทดสอบที่ใช้เวลานานมากและมีกรอบการทดสอบจำนวนมากอาจทำให้เกิดคอขวดในการดำเนินการ

หากคุณต้องตั้งค่าระยะหมดเวลาที่สูงกว่าค่าเริ่มต้น โปรดอ่านต่อ

ลบล้างระยะหมดเวลาเริ่มต้น

เฟรมเวิร์กไม่รองรับการขยายเทมเพลตสำหรับการดำเนินการ atest ดังนั้น โปรดใช้เทมเพลตที่ให้มาซึ่งมีระยะหมดเวลาที่นานขึ้น

  • การทดสอบแบบยาวสำหรับ VM 1 รายการ:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device_long_test",
    }
    
  • การทดสอบแบบยาวด้วย VM 2 รายการ

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices_long_test",
    }
    

เพิ่มความคิดเห็นที่ระบุวัตถุประสงค์ของการใช้เทมเพลตนี้อย่างชัดเจน และอธิบายเหตุผลที่จำเป็นต้องขยายเวลา (เช่น หากการทดสอบต้องดาวน์โหลดอาร์ติแฟกต์ที่ใช้เวลาจำนวนหนึ่ง)

พุชไฟล์ไปยังอุปกรณ์

ขั้นตอนต่อไปนี้จะอธิบายวิธีพุชไฟล์ไปยังอุปกรณ์สำหรับการกำหนดค่า atest

พุชไฟล์ไปยังอุปกรณ์

เฟรมเวิร์กไม่รองรับการขยายเทมเพลตสำหรับการดำเนินการ atest ดังนั้น คุณต้องสร้างไฟล์ AndroidTest.xml ที่แทนที่เทมเพลตเริ่มต้นทั้งหมด และมีตัวเลือก target_preparer ที่สอดคล้องกันสำหรับอุปกรณ์

  1. คัดลอกเนื้อหาของเทมเพลตต่อไปนี้

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. อัปเดต {MODULE} ด้วยชื่อโมดูลของการทดสอบ

  3. เพิ่ม com.android.tradefed.targetprep.PushFilePreparer ลงในอุปกรณ์แต่ละเครื่อง

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

กำหนดค่า CATBox

หากต้องการเรียกใช้การทดสอบเป็นชุด คุณต้องกำหนดค่า CATBox

  1. สร้างไฟล์การกำหนดค่าใหม่ใน libraries/sdv/sdv_catbox/res/config/ และทำตามรูปแบบการตั้งชื่อต่อไปนี้

    • การทดสอบตัวอย่าง: sdv-sample-<NAME>-test.xml
    • การทดสอบ E2E: sdv-e2e-<NAME>-test.xml
    • การทดสอบที่ใช้เวลานาน: sdv-long-running-<NAME>-test.xml
    • การทดสอบประสิทธิภาพ: sdv-performance-<NAME>-test.xml
    • การทดสอบฮาร์ดแวร์: sdv-hw-<NAME>-test.xml
  2. เพิ่มข้อมูลที่เกี่ยวข้องตามประเภทการทดสอบ ดังนี้

  • การกำหนดค่าการทดสอบ VM 1 รายการ:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/one-device" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • การกำหนดค่าการทดสอบ VM 2 รายการ

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/two-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    
  • การกำหนดค่าการทดสอบ VM 3 รายการ:

    <configuration description="SDV <NAME> Test">
        <!-- Template for Device Configuration -->
        <template-include name="device-config" default="sdv-device-config/three-devices" />
    
        <!-- Plan. Use the same name as the file name -->
        <option name="plan" value="<CONFIG_FILE_NAME>"/>
    
        <!-- Test: mobly-par-file-name should match the module name -->
        <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
    </configuration>
    

เทมเพลตเริ่มต้นเพียงพอสำหรับการทดสอบส่วนใหญ่ หลีกเลี่ยงการสร้างการกำหนดค่าที่กำหนดเอง เว้นแต่จะมีเหตุผลที่น่าสนใจ

อัปเดตระยะหมดเวลาเริ่มต้น

หากระยะหมดเวลาเริ่มต้นไม่เพียงพอสำหรับการทดสอบ คุณสามารถลบล้างระยะหมดเวลาดังกล่าวได้

ลบล้างระยะหมดเวลาเริ่มต้น

หากต้องการลบล้างระยะหมดเวลาเริ่มต้น ให้เพิ่มข้อมูลต่อไปนี้ที่ส่วนท้ายของไฟล์การกำหนดค่า การทดสอบที่ใช้เวลานานควรมีระยะหมดเวลาสูงสุด 10 นาที

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

พุชไฟล์ไปยังอุปกรณ์

ส่วนต่อไปนี้จะอธิบายวิธีพุชไฟล์ไปยังอุปกรณ์เมื่อกำหนดค่า CATBox

พุชไฟล์ไปยังอุปกรณ์

หากต้องการพุชไฟล์ไปยังอุปกรณ์ที่เกี่ยวข้อง ให้เพิ่มการกำหนดค่าต่อไปนี้หลังตัวเลือก plan

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

หากต้องการไฟล์ในอุปกรณ์แต่ละเครื่อง ให้เพิ่มการกำหนดค่าสำหรับอุปกรณ์แต่ละเครื่อง (เช่น name=device1, name=device2)

การดำเนินการทดสอบ

วิธีการเหล่านี้ถือว่าคุณได้ตั้งค่าสภาพแวดล้อม SDV ที่ใช้งานได้เสร็จสมบูรณ์แล้ว

ตั้งค่าสภาพแวดล้อม

เฟรมเวิร์กไม่ได้เริ่มอินสแตนซ์ Cloud Virtual Device (CVD) คุณจึงต้องเริ่มอินสแตนซ์ก่อนทำการทดสอบ

  1. ตั้งค่าสภาพแวดล้อมและเปิดเป้าหมาย SDV โดยทำดังนี้

    . build/envsetup.sh
    lunch <TARGET>
    
  2. เริ่มอินสแตนซ์ CVD แรกโดยทำดังนี้

    cvd create --config=sdv_core_instance1
    
  3. เริ่มอินสแตนซ์ CVD รายการที่ 2 (สำหรับการทดสอบ VM หลายรายการ) โดยทำดังนี้

    cvd create --config=sdv_core_instance2
    
  4. เริ่มอินสแตนซ์ CVD รายการที่ 3 (สำหรับการทดสอบหลาย VM) โดยทำดังนี้

    cvd create --config=sdv_core_instance3
    

เรียกใช้ atest

atest <TestModuleName>

เรียกใช้ CATBox

คำสั่งเหล่านี้จะถือว่าคุณอยู่ในไดเรกทอรีรากของที่เก็บ

  1. สร้าง CATBox: m catbox
  2. (ไม่บังคับ) ดูแผนการทดสอบ SDV ทั้งหมดที่มีใน CATBox โดยทำดังนี้
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

ทำการทดสอบ

  • เรียกใช้การทดสอบ VM 1 รายการ

    NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520
    
  • เรียกใช้การทดสอบ VM 2 รายการ

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521
    
  • เรียกใช้การทดสอบ VM 3 รายการ

    NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522