AOSP มีเทมเพลตทดสอบสำหรับโมดูลทดสอบที่ไม่ใช่ Python ฝั่งโฮสต์ คลาสย่อยของ BaseTest ของนักเรียกใช้ VTS
นักพัฒนาแอปสามารถใช้เทมเพลตเหล่านี้เพื่อลดความพยายามที่เกี่ยวข้องใน การผสานรวมการทดสอบดังกล่าว ส่วนนี้จะครอบคลุมการกำหนดค่าและการใช้การทดสอบ (อยู่ใน VTS กรอบการทดสอบ/เทมเพลต ) และแสดงตัวอย่างของเทมเพลตที่ใช้กันโดยทั่วไป
เทมเพลต BinaryTest
ใช้เมนู การทดสอบไบนารี เทมเพลตเพื่อผสานรวมการทดสอบที่ดำเนินการในอุปกรณ์เป้าหมายใน VTS การทดสอบฝั่งเป้าหมายประกอบด้วย
- การทดสอบโดยใช้ C++ ที่คอมไพล์และพุชไปยังอุปกรณ์
- การทดสอบ Python ฝั่งเป้าหมายซึ่งคอมไพล์เป็นไบนารี
- สคริปต์ Shell ที่เป็นไฟล์ปฏิบัติการในอุปกรณ์
การทดสอบเหล่านี้สามารถนำไปผสานรวมใน VTS ได้โดยมีหรือไม่มี BranchTest เทมเพลต
ผสานรวมการทดสอบฝั่งเป้าหมายกับ เทมเพลต BinaryTest
เทมเพลต BumbleTest ได้รับการออกแบบมาเพื่อช่วยให้นักพัฒนาซอฟต์แวร์สามารถผสานรวม
การทดสอบฝั่งเป้าหมาย ในกรณีส่วนใหญ่ คุณสามารถเพิ่มบรรทัดง่ายๆ ไม่กี่บรรทัด
การกำหนดค่าใน AndroidTest.xml
ตัวอย่างการกำหนดค่าจาก
VtsDeviceTreeEarlyMountTest
<configuration description="Config for VTS VtsDeviceTreeEarlyMountTest."> ... <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> <option name="test-module-name" value="VtsDeviceTreeEarlyMountTest"/> <option name="binary-test-source" value="_32bit::DATA/nativetest/dt_early_mount_test/dt_early_mount_test" /> <option name="binary-test-source" value="_64bit::DATA/nativetest64/dt_early_mount_test/dt_early_mount_test" /> <option name="test-timeout" value="5m"/> </test> </configuration>
ในการกำหนดค่านี้:
binary-test-source
และbinary-test-type
เฉพาะเทมเพลต- การระบุเส้นทางโฮสต์แบบสัมพัทธ์ของแหล่งที่มาของไบนารีทดสอบจะเปิดใช้เทมเพลต เพื่อจัดการการเตรียมการ การพุชไฟล์ การดำเนินการทดสอบ การแยกวิเคราะห์ผลลัพธ์ การทำความสะอาดข้อมูล
- เทมเพลตมีวิธีที่เกี่ยวข้องกับการสร้างกรอบการทดสอบสำหรับคลาสย่อยไปยัง ลบล้าง
- เทมเพลตจะถือว่ามีกรอบการทดสอบ 1 รายการต่อโมดูลไบนารีการทดสอบ และไบนารี ชื่อไฟล์ต้นฉบับจะใช้เป็นชื่อกรอบการทดสอบโดยค่าเริ่มต้น
ตัวเลือกการกำหนดค่า
เทมเพลต BinaryTest สนับสนุนตัวเลือกการกำหนดค่าต่อไปนี้
ชื่อตัวเลือก | ประเภทค่า | คำอธิบาย |
---|---|---|
การทดสอบไบนารีต้นฉบับ | สตริง | เส้นทางแหล่งที่มาการทดสอบไบนารีที่สัมพันธ์กับไดเรกทอรีกรณีการทดสอบ vts เปิดอยู่
เป็นโฮสต์ ตัวอย่าง: DATA/nativetest/test |
ไดเรกทอรีการทดสอบไบนารี | สตริง | ไดเรกทอรีที่ใช้งานอยู่ (เส้นทางฝั่งเซิร์ฟเวอร์) ตัวอย่าง: /data/local/tmp/testing/ |
การทดสอบไบนารีด้วยการเข้ารหัส | สตริง | ตัวแปรสภาพแวดล้อมสำหรับไบนารี ตัวอย่าง: PATH=/new:$PATH |
การทดสอบไบนารี | สตริง | ทดสอบอาร์กิวเมนต์หรือแฟล็ก ตัวอย่าง: --gtest_filter=test1 |
ไบนารี-ทดสอบ-ld-library-path | สตริง | ตัวแปรสภาพแวดล้อม LD_LIBRARY_PATH ตัวอย่าง: /data/local/tmp/lib |
การทดสอบไบนารีในการปิดใช้เฟรมเวิร์ก | บูลีน | เรียกใช้ adb stop เพื่อปิด Android Framework ก่อนทดสอบ
ตัวอย่าง: true |
เซิร์ฟเวอร์ไบนารีทดสอบและหยุดแบบดั้งเดิม | บูลีน | หยุดเซิร์ฟเวอร์เนทีฟที่กำหนดค่าอย่างถูกต้องทั้งหมดในระหว่างการทดสอบ ตัวอย่าง
true |
ประเภทการทดสอบไบนารี | สตริง | ประเภทเทมเพลต เทมเพลตประเภทอื่นๆ ขยายจากเทมเพลตนี้ แต่
ไม่จำเป็นต้องระบุตัวเลือกนี้ สำหรับเทมเพลตนี้เนื่องจากคุณ
ระบุ binary-test-source แล้ว |
สำหรับตัวเลือกที่มีประเภทค่าเป็น strings
คุณจะเพิ่มค่าได้หลายค่า
โดยใช้ตัวเลือกซ้ำในการกำหนดค่า ตัวอย่างเช่น ตั้งค่า
binary-test-source
2 ครั้ง (ตามที่แสดงใน
VtsDeviceTreeEarlyMountTest
)
ทดสอบแท็ก
คุณเพิ่มแท็กทดสอบได้โดยใส่หน้าแท็กลงในตัวเลือกด้วย strings
และใช้ ::
เป็นตัวคั่น สำหรับแท็กทดสอบ
มีประโยชน์เมื่อรวมแหล่งข้อมูลไบนารีที่มีชื่อเดียวกันแต่ต่างกัน
บิตเนสหรือไดเรกทอรีระดับบนสุด เช่น เพื่อหลีกเลี่ยงการพุชไฟล์หรือชื่อผลลัพธ์
แหล่งที่มาที่มีชื่อเดียวกัน แต่มาจากไดเรกทอรีแหล่งที่มาต่างกัน
คุณสามารถระบุแท็กที่แตกต่างกันสำหรับแหล่งที่มาเหล่านี้ได้
ตามที่แสดงในตัวอย่าง VtsDeviceTreeEarlyMountTest
ที่มี
แหล่งที่มา dt_early_mount_test
2 รายการ แท็กทดสอบคือ
คำนำหน้า _32bit::
และ _64bit::
เปิดอยู่
binary-test-source
แท็กที่ลงท้ายด้วย 32bit
หรือ
64bit
ทำเครื่องหมายการทดสอบว่าพร้อมใช้งานกับบิตเรต ABI 1 รายการโดยอัตโนมัติ
นั่นคือ การทดสอบด้วยแท็ก _32bit
จะไม่ดำเนินการกับ ABI แบบ 64 บิต ไม่ใช่
การระบุแท็กจะเท่ากับการใช้แท็กที่มีสตริงว่าง
ตัวเลือกที่มีแท็กเดียวกันจะได้รับการจัดกลุ่มและแยกออกจากแท็กอื่นๆ สำหรับ
ตัวอย่างเช่น binary-test-args
ที่มีแท็ก _32bit
คือ
ใช้กับ binary-test-source
ที่มีแท็กเดียวกันและดำเนินการแล้วเท่านั้น
ใน binary-test-working-directory
ด้วยแท็กเดียวกัน
ตัวเลือก binary-test-working-directory
เป็นไม่บังคับสำหรับการทดสอบไบนารี
ซึ่งช่วยให้คุณระบุไดเรกทอรีที่ใช้งานได้เดียวสำหรับแท็กได้ เมื่อ
ไม่ได้ระบุตัวเลือก binary-test-working-directory
, ค่าเริ่มต้น
ไดเรกทอรีจะใช้สำหรับแต่ละแท็ก
ระบบจะเพิ่มชื่อแท็กต่อท้ายชื่อกรอบการทดสอบในรายงานผลลัพธ์โดยตรง
ตัวอย่างเช่น กรอบการทดสอบ testcase1
ที่มีแท็ก _32bit
ปรากฏเป็น testcase1_32bit
ในรายงานผลลัพธ์
ผสานรวมการทดสอบฝั่งเป้าหมายโดยไม่มี เทมเพลต BinaryTest
ใน VTS รูปแบบการทดสอบเริ่มต้นคือการทดสอบ Python ฝั่งโฮสต์ที่ต่อยอดมาจาก BaseTest ในโปรแกรมวิ่ง VTS ในการผสานรวมการทดสอบฝั่งเป้าหมาย ก่อนอื่นคุณต้องพุช ทดสอบไฟล์ไปยังอุปกรณ์ ดำเนินการทดสอบโดยใช้คำสั่ง Shell จากนั้นแยกวิเคราะห์ โดยใช้สคริปต์ Python ฝั่งโฮสต์
ไบนารีการทดสอบการพุช
เราขอแนะนำให้พุชไฟล์โดยใช้ตัวเตรียมเป้าหมาย VtsFilePusher
ตัวอย่าง
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> <option name="push" value="DATA/test->/data/local/tmp/test"/> </target_preparer>
VtsFilePusher
จะดำเนินการต่อไปนี้
- ตรวจสอบการเชื่อมต่ออุปกรณ์
- กำหนดเส้นทางไฟล์ต้นฉบับสัมบูรณ์
- พุชไฟล์โดยใช้คำสั่ง
adb push
- ลบไฟล์หลังจากการทดสอบเสร็จสิ้น
หรือจะพุชไฟล์ด้วยตนเองโดยใช้การทดสอบ Python ฝั่งโฮสต์ก็ได้ สคริปต์ซึ่งทำตามขั้นตอนที่คล้ายกัน
ทำการทดสอบ
หลังจากพุชไฟล์ไปยังอุปกรณ์ ให้ทำการทดสอบโดยใช้คำสั่ง Shell สคริปต์ทดสอบ Python ฝั่งโฮสต์ ตัวอย่าง
device = self.android_devices[0] res = device.shell.Execute(["chmod a+x /data/local/tmp/test", "/data/local/tmp/test"]) asserts.AssertFalse(any(res[return_codes]))
เทมเพลต GtestBinaryTest
GtestBranchTest template โฮสต์ไบนารีการทดสอบ GTest ซึ่งแต่ละเทมเพลตจะมี กรอบการทดสอบหลายรายการ เทมเพลตนี้จะขยายเทมเพลต BranchTest โดยการลบล้าง การตั้งค่า การสร้างกรอบการทดสอบ และวิธีการแยกวิเคราะห์ผลลัพธ์ ดังนั้น BinaryTest ทั้งหมด รับช่วงการกำหนดค่าต่อ
GtestBinaryTest เพิ่มตัวเลือก gtest-batch-mode
:
ชื่อตัวเลือก | ประเภทค่า | คำอธิบาย |
---|---|---|
ประเภทการทดสอบไบนารี | สตริง | ประเภทเทมเพลต ใช้ค่า gtest |
โหมดกลุ่ม Gtest | บูลีน | เรียกใช้ไบนารี Gtest ในโหมดแบบกลุ่ม ตัวอย่าง: true |
โดยทั่วไป การตั้งค่า gtest-batch-mode
เป็น true
จะช่วยเพิ่มประสิทธิภาพและลดความน่าเชื่อถือลงเล็กน้อย เป็นไปตามข้อกำหนดของ VTS
โมดูลจำนวนมากใช้โหมดกลุ่มเพื่อปรับปรุงประสิทธิภาพการทำงาน เพื่อความน่าเชื่อถือ
แต่หากไม่ระบุโหมด ค่าเริ่มต้นจะเป็นแบบไม่เป็นกลุ่ม
โหมดไม่ใช่แบบกลุ่ม
โหมดไม่ใช่แบบกลุ่มจะเรียกใช้ไบนารี GTest ทีละรายการสำหรับแต่ละกรอบการทดสอบ สำหรับ เช่น ถ้าไบนารี GTest มี 10 กรอบการทดสอบ (หลังจากกรองตามโฮสต์ การกำหนดค่าด้านข้าง) การเรียกไบนารี 10 ครั้งบน Device Shell ในแต่ละครั้ง โดยใช้ตัวกรองการทดสอบอื่น ผลลัพธ์ของ GTest ที่ไม่ซ้ำกันสำหรับกรอบการทดสอบแต่ละรายการ เทมเพลตจะสร้างและแยกวิเคราะห์ XML
ข้อดีของการใช้โหมดที่ไม่ใช่แบบกลุ่มมีดังนี้
- การแยกเคสทดสอบ ข้อขัดข้องหรือการค้างในกรอบการทดสอบ 1 รายการ ไม่ส่งผลกระทบต่อกรอบการทดสอบอื่นๆ
- รายละเอียด รับการทำโปรไฟล์/การครอบคลุมต่อกรณีได้ง่ายขึ้น การวัด, systrace, Bugreport, logcat ฯลฯ ผลการทดสอบและบันทึกนั้น ดึงข้อมูลมาทันทีหลังจากกรอบการทดสอบแต่ละครั้งเสร็จสิ้น
ข้อเสียของการใช้โหมดที่ไม่ใช่แบบกลุ่มมีดังนี้
- การโหลดที่ซ้ำซ้อน ทุกครั้งที่มีการเรียกไบนารีของ GTest ระบบจะโหลดไลบรารีที่เกี่ยวข้องและตั้งค่าคลาสเริ่มต้น
- ค่าใช้จ่ายในการสื่อสาร หลังจากการทดสอบเสร็จสิ้น โฮสต์ และอุปกรณ์เป้าหมายสื่อสารเพื่อการแยกวิเคราะห์ผลลัพธ์และคำสั่งถัดไป (ในอนาคต การเพิ่มประสิทธิภาพสูงสุดได้)
โหมดกลุ่ม
ในโหมดกลุ่มของ GTest ระบบจะเรียกไบนารีทดสอบเพียงครั้งเดียวเมื่อมีการทดสอบที่ใช้เวลานาน ค่าตัวกรองที่มีกรอบการทดสอบทั้งหมดที่กรองโดยการกำหนดค่าฝั่งโฮสต์ ( หลีกเลี่ยงปัญหาการโหลดซ้ำซ้อนในโหมดไม่ใช่แบบกลุ่ม) คุณสามารถแยกวิเคราะห์การทดสอบ ผลลัพธ์สำหรับ GTest โดยใช้ที่ส่งเอาต์พุต.xml หรือใช้เอาต์พุตเทอร์มินัล
เมื่อใช้เอาต์พุต.xml (ค่าเริ่มต้น) ให้ทำดังนี้
ผลการทดสอบจะได้รับการแยกวิเคราะห์ผ่าน XML เอาต์พุตของ GTest เช่นเดียวกับโหมดที่ไม่ใช่แบบกลุ่ม แต่เนื่องจากระบบสร้าง XML เอาต์พุตหลังจากการทดสอบทั้งหมด เสร็จสมบูรณ์ หากกรอบการทดสอบขัดข้อง ไฟล์ XML ของไบนารีหรืออุปกรณ์ไม่มีผลลัพธ์ ที่สร้างขึ้น
เมื่อใช้เอาต์พุตเทอร์มินัล ให้ทำดังนี้
ขณะที่ GTest ทำงานอยู่ ระบบจะพิมพ์บันทึกการทดสอบและความคืบหน้าไปยังเทอร์มินัล ในรูปแบบที่สามารถแยกวิเคราะห์โดยเฟรมเวิร์กสำหรับสถานะการทดสอบ ผลลัพธ์ และ บันทึก
ข้อดีของการใช้โหมดแบบกลุ่มมีดังนี้
- การแยกเคสทดสอบ ให้การทดสอบในระดับเดียวกัน การแยกเคสเป็นโหมดแบบไม่เป็นกลุ่มหากเฟรมเวิร์กรีสตาร์ทไบนารี/อุปกรณ์ หลังการขัดข้องโดยใช้ตัวกรองการทดสอบที่ลดลง (ไม่รวมการทดสอบที่เสร็จสิ้นและการทดสอบที่ขัดข้อง กรณี)
- รายละเอียด ให้รายละเอียดของกรอบการทดสอบเดียวกันกับ โหมดไม่ใช่แบบกลุ่ม
ข้อเสียของการใช้โหมดกลุ่มมีดังนี้
- ค่าบำรุงรักษา หากรูปแบบการบันทึก GTest มีการเปลี่ยนแปลง การทดสอบทั้งหมดจะขัดข้อง
- ความสับสน กรอบการทดสอบสามารถพิมพ์สิ่งที่คล้ายกับ GTest ได้ รูปแบบความคืบหน้า ซึ่งอาจทำให้รูปแบบดังกล่าวสับสนได้
ซึ่งเพราะข้อเสียเหล่านี้ เราจึงนำตัวเลือกในการใช้ เอาต์พุตบรรทัดคำสั่ง เราจะพิจารณาตัวเลือกนี้อีกครั้งในอนาคตเพื่อปรับปรุง ความเสถียรของฟังก์ชันนี้
เทมเพลต HostBinaryTest
เทมเพลต HostBinaryTest มีไฟล์ปฏิบัติการฝั่งโฮสต์ที่ไม่มีอยู่ ในไดเรกทอรีอื่นๆ หรือในสคริปต์ Python การทดสอบเหล่านี้รวมถึง
- คอมไพล์ไบนารีทดสอบที่ปฏิบัติการได้ในโฮสต์
- สคริปต์สั่งการใน Shell, Python หรือภาษาอื่นๆ
ตัวอย่างหนึ่งคือ VTS การทดสอบฝั่งโฮสต์ของนโยบาย SELinux สำหรับความปลอดภัย
<configuration description="Config for VTS Security SELinux policy host-side test cases"> ... <test class="com.android.tradefed.testtype.VtsMultiDeviceTest"> <option name="test-module-name" value="VtsSecuritySelinuxPolicyHost"/> <option name="binary-test-source" value="out/host/linux-x86/bin/VtsSecuritySelinuxPolicyHostTest" /> <option name="binary-test-type" value="host_binary_test"/> </test> </configuration>
HostBinaryTest ไม่ได้ขยายเทมเพลต BaryTest แต่จะใช้เทมเพลต
การกำหนดค่าการทดสอบ ในตัวอย่างข้างต้น binary-test-source
จะระบุเส้นทางสัมพัทธ์ฝั่งโฮสต์ไปยังไฟล์ปฏิบัติการทดสอบ และ
binary-test-type
คือhost_binary_test
คล้ายกับ
เทมเพลต BinaryTest จะใช้ชื่อไฟล์ไบนารีเป็นชื่อกรอบการทดสอบโดยใช้
"ค่าเริ่มต้น"
ขยายเทมเพลตที่มีอยู่
คุณใช้เทมเพลตได้โดยตรงในการกำหนดค่าการทดสอบเพื่อรวมการทดสอบที่ไม่ใช่ Python หรือขยายไว้ในคลาสย่อยเพื่อจัดการกับข้อกำหนดการทดสอบที่เฉพาะเจาะจง เทมเพลตใน ที่เก็บ VTS จะมีส่วนขยายต่อไปนี้
ขอแนะนำให้นักพัฒนาซอฟต์แวร์ขยายเทมเพลตที่มีอยู่ ข้อกำหนดการทดสอบ สาเหตุทั่วไปในการขยายเทมเพลตมีดังนี้
- กระบวนการตั้งค่าการทดสอบพิเศษ เช่น การเตรียมอุปกรณ์ให้มี คำสั่ง
- สร้างกรอบการทดสอบและชื่อการทดสอบที่ต่างกัน
- การแยกวิเคราะห์ผลลัพธ์โดยการอ่านเอาต์พุตจากคำสั่งหรือใช้เงื่อนไขอื่นๆ
เทมเพลตประกอบด้วยเมธอดต่างๆ เพื่อช่วยให้ขยายเทมเพลตที่มีอยู่ได้ง่ายขึ้น เฉพาะสำหรับฟังก์ชันการทำงานแต่ละอย่าง หากคุณได้ปรับปรุงการออกแบบสำหรับ เราขอแนะนำให้คุณมีส่วนร่วมในฐานโค้ด VTS