หน้านี้จะแสดงภาพรวมของไลบรารีเฟรมเวิร์กการทดสอบ 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 ต่อไปนี้โดยค่าเริ่มต้น
moblyabsl-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 ที่สอดคล้องกันสำหรับอุปกรณ์
คัดลอกเนื้อหาของเทมเพลตต่อไปนี้
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 รายการ:
<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) คุณจึงต้องเริ่มอินสแตนซ์ก่อนทำการทดสอบ
ตั้งค่าสภาพแวดล้อมและเปิดเป้าหมาย 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