เอกสารนี้ให้ภาพรวมของเฟรมเวิร์กการทดสอบ SDV และแนะนำ วิธีกำหนดค่าและเรียกใช้การทดสอบ ใช้เฟรมเวิร์กการทดสอบ SDV สำหรับการทดสอบตั้งแต่ต้นจนจบ เครื่องมือนี้สร้างขึ้นบน Mobly และคุณเขียนการทดสอบใน Python ได้
ตั้งค่าสภาพแวดล้อม
เอกสารนี้ถือว่าคุณได้ตั้งค่าเวิร์กสเตชันสำหรับ SDV แล้ว หากต้องการเรียกใช้
การทดสอบเฟรมเวิร์ก ให้ติดตั้ง virtualenv
ทรัพยากร Dependency ของ Python
แนวทางที่แนะนำสำหรับการจัดการทรัพยากร Dependency ใน Android คือการแพ็กเกจ การทดสอบ, Python และทรัพยากร Dependency ของการทดสอบและ Python เป็นไฟล์ที่เรียกใช้งานได้โดยใช้การกำหนดค่าบิลด์ คุณต้องทำตามแนวทางนี้ในที่เก็บการทดสอบ SDV
ไลบรารีเฟรมเวิร์กการทดสอบ SDV มีทรัพยากร Dependency เหล่านี้โดยค่าเริ่มต้น
moblyabsl-pyต้องระบุเพื่อใช้การกำหนดพารามิเตอร์ในการทดสอบpexpectจำเป็นสำหรับฟังก์ชันการทำงานของคำสั่งแบบอินเทอร์แอกทีฟptyprocessจำเป็นสำหรับฟังก์ชันการทำงานของคำสั่งแบบอินเทอร์แอกทีฟ
หากต้องการทรัพยากร Dependency เฉพาะการทดสอบ ให้รวมไว้ในไฟล์ Android.bp
ของการทดสอบ
python_test_host {
…
libs: [
"<DEPENDENCY1",
"<DEPENDENCY2",
…
],
…
}
ประเภทการทดสอบระบบ
คุณสร้างการทดสอบระบบโดยใช้เฟรมเวิร์กการทดสอบ SDV เฟรมเวิร์ก จะแยกความแตกต่างระหว่างประเภทต่อไปนี้ จัดหมวดหมู่การทดสอบอย่างถูกต้อง ดังนี้
- การทดสอบตัวอย่าง: เรียกใช้บริการตัวอย่าง SDV และตรวจสอบว่าผลลัพธ์ ตรงกับเอาต์พุตที่คาดไว้
- การทดสอบ E2E: อย่าใช้บริการตัวอย่าง SDV
- การทดสอบที่ใช้เวลานาน: ออกแบบมาสำหรับระยะเวลาการดำเนินการที่ยาวนาน
- การทดสอบประสิทธิภาพ: ใช้ไลบรารี
perfetto - การทดสอบฮาร์ดแวร์: ออกแบบมาเพื่อดำเนินการบนอุปกรณ์จริงเท่านั้น ไม่ใช่ใน Cuttlefish (CF)
สร้างการทดสอบ
การทดสอบทั้งหมดที่เขียนโดยใช้เฟรมเวิร์กต้องอยู่ในที่เก็บการทดสอบ ตำแหน่งที่แน่นอนของการทดสอบจะขึ้นอยู่กับประเภทของการทดสอบ
กำหนดค่าการทดสอบ
กำหนดค่าการทดสอบทั้งหมดให้ทำงานโดยใช้ทั้ง atest และ CATBox
กำหนดค่า atest
เฟรมเวิร์กมีเทมเพลตสำหรับการทดสอบเครื่องเสมือน (VM) 1, 2 และ 3 รายการ
เพิ่มโค้ดต่อไปนี้ในไฟล์ Android.bp
VM 1 รายการ
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 เดียวแบบยาว
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 ที่เกี่ยวข้องสำหรับ
อุปกรณ์
คัดลอกเนื้อหาของเทมเพลต
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
อัปเดต
{MODULE}ด้วยชื่อโมดูลของการทดสอบเพิ่ม
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
สร้างไฟล์การกำหนดค่าใหม่ใน
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
- การทดสอบตัวอย่าง:
เพิ่มข้อมูลที่เกี่ยวข้องตามประเภทการทดสอบ
การกำหนดค่าการทดสอบ 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 รายการ
<!-- Copyright 2025 Google LLC -->
<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 option
<!-- 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 ที่ใช้งานได้เสร็จสมบูรณ์แล้ว
ตั้งค่าสภาพแวดล้อม
เฟรมเวิร์กจะไม่เริ่มอินสแตนซ์อุปกรณ์เสมือนระบบคลาวด์ (CVD) ดังนั้นคุณ ต้องเริ่มอินสแตนซ์ก่อนเรียกใช้การทดสอบ
ตั้งค่าสภาพแวดล้อมและเปิดใช้เป้าหมาย SDV
. build/envsetup.sh lunch <TARGET>เริ่มอินสแตนซ์อุปกรณ์เสมือนระบบคลาวด์ (CVD) เครื่องแรก
cvd create --config=sdv_core_instance1เริ่มอินสแตนซ์อุปกรณ์เสมือนระบบคลาวด์ (CVD) ที่ 2 (สำหรับการทดสอบแบบหลาย VM)
cvd create --config=sdv_core_instance2เริ่มอินสแตนซ์อุปกรณ์เสมือนระบบคลาวด์ (CVD) ที่ 3 (สำหรับการทดสอบแบบหลาย VM)
cvd create --config=sdv_core_instance3
เรียกใช้ atest
atest <TestModuleName>
เรียกใช้ CATBox
คำสั่งเหล่านี้จะถือว่าคุณอยู่ในไดเรกทอรีรากของที่เก็บ
- สร้าง CATBox:
m catbox - (ไม่บังคับ) ดูแผนการทดสอบ 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