หน้านี้อธิบายวิธีเขียนโปรแกรมเรียกใช้การทดสอบใหม่ใน Tradefed
ฉากหลัง
หากคุณสงสัยเกี่ยวกับตำแหน่งของโปรแกรมเรียกใช้การทดสอบในสถาปัตยกรรม Tradefed โปรดดูโครงสร้างของโปรแกรมเรียกใช้การทดสอบ
ทั้งนี้ไม่จำเป็นต้องมีข้อกำหนดเบื้องต้นในการเขียน Test Runner ใหม่ Test Runner สามารถเขียนแยกกันได้
ขั้นต่ำ: ใช้การติดตั้งใช้งานอินเทอร์เฟซ
ข้อกำหนดขั้นต่ำในการมีสิทธิ์เป็นโปรแกรมเรียกใช้การทดสอบ Tradefed คือการติดตั้งใช้งานอินเทอร์เฟซ IRemoteTest
และโดยเฉพาะอย่างยิ่งเมธอด run(TestInformation testInfo, ITestInvocationListener listener)
วิธีนี้เป็นวิธีที่ Harness เรียกใช้เมื่อใช้ Test Runner ซึ่งคล้ายกับ Java Runnable
ทุกส่วนของวิธีการดังกล่าวถือเป็นส่วนหนึ่งของการดำเนินการโปรแกรมเรียกใช้การทดสอบ
รายงานผลลัพธ์จากเครื่องมือเรียกใช้การทดสอบ
เมธอด run
ในอินเทอร์เฟซพื้นฐานจะให้สิทธิ์เข้าถึงออบเจ็กต์ Listener ของ
ประเภท ITestInvocationListener
ออบเจ็กต์นี้เป็นคีย์สําคัญในการรายงานผลลัพธ์ที่มีโครงสร้างจากเครื่องมือเรียกใช้การทดสอบไปยัง Harness
การรายงานผลลัพธ์ที่มีโครงสร้างทำให้โปรแกรมเรียกใช้การทดสอบมีคุณสมบัติดังต่อไปนี้
- รายงานรายการที่เหมาะสมของการทดสอบทั้งหมดที่เรียกใช้ ระยะเวลาที่ใช้ และผลการทดสอบแต่ละรายการว่าผ่าน ไม่ผ่าน หรืออยู่ในสถานะอื่นๆ
- รายงานเมตริกที่เชื่อมโยงกับการทดสอบ หากมี เช่น เมตริกเวลาในการติดตั้ง
- เหมาะกับเครื่องมือโครงสร้างพื้นฐานส่วนใหญ่ เช่น แสดงผลลัพธ์และ เมตริก ฯลฯ
- โดยปกติแล้วจะแก้ไขข้อบกพร่องได้ง่ายกว่าเนื่องจากมีการติดตามการ ดำเนินการที่ละเอียดยิ่งขึ้น
อย่างไรก็ตาม การรายงานผลลัพธ์ที่มีโครงสร้างเป็นทางเลือก ผู้ทดสอบอาจเพียงต้องการประเมินสถานะของการทดสอบทั้งหมดเป็น "ผ่าน" หรือ "ไม่ผ่าน" โดยไม่ต้องมีรายละเอียดของการดำเนินการจริง
คุณเรียกใช้เหตุการณ์ต่อไปนี้ใน Listener เพื่อแจ้งให้ Harness ทราบถึงความคืบหน้าปัจจุบันของการดำเนินการได้
- testRunStarted: แจ้งการเริ่มต้นกลุ่มของกรณีทดสอบที่
เกี่ยวข้องด้วยกัน
- testStarted: แจ้งการเริ่มต้นของกรณีทดสอบ
- testFailed/testIgnored: แจ้งการเปลี่ยนแปลงสถานะของกรณีทดสอบ ที่กำลังดำเนินการ ระบบจะถือว่ากรณีทดสอบที่ไม่มีการเปลี่ยนแปลงสถานะ ผ่าน
- testEnded: แจ้งการสิ้นสุดของกรณีทดสอบ
- testRunFailed: แจ้งว่าสถานะโดยรวมของการดำเนินการกลุ่มกรณีทดสอบ ไม่สำเร็จ การทดสอบอาจผ่านหรือไม่ผ่าน โดยไม่ขึ้นอยู่กับผลลัพธ์ของกรณีทดสอบ ทั้งนี้ขึ้นอยู่กับสิ่งที่ การดำเนินการคาดหวัง เช่น ไบนารีที่เรียกใช้กรณีทดสอบหลายรายการ อาจรายงานกรณีทดสอบที่ผ่านทั้งหมด แต่มีรหัสทางออกของข้อผิดพลาด (ไม่ว่าด้วยเหตุผลใดก็ตาม เช่น ไฟล์รั่ว ฯลฯ)
- testRunEnded: แจ้งการสิ้นสุดกลุ่มของกรณีทดสอบ
การดูแลรักษาและตรวจสอบว่ามีการเรียกกลับตามลำดับที่ถูกต้องเป็นความรับผิดชอบของผู้ใช้โปรแกรมเรียกใช้การทดสอบ เช่น การตรวจสอบว่ามีการเรียกใช้ testRunEnded
ในกรณีที่มีข้อยกเว้นโดยใช้คําสั่ง finally
การติดต่อกลับสำหรับกรณีทดสอบ (testStarted
, testEnded
ฯลฯ) เป็นการดำเนินการที่ไม่บังคับ การทดสอบ
อาจเกิดขึ้นโดยไม่มีกรณีทดสอบ
คุณอาจสังเกตเห็นว่าโครงสร้างเหตุการณ์นี้ได้รับแรงบันดาลใจจากโครงสร้าง JUnit ทั่วไป เราตั้งใจให้เป็นเช่นนี้เพื่อคงไว้ซึ่งสิ่งพื้นฐานที่นักพัฒนาซอฟต์แวร์ มักจะมีความรู้
รายงานบันทึกจากโปรแกรมเรียกใช้การทดสอบ
หากคุณกำลังเขียนคลาสหรือโปรแกรมเรียกใช้การทดสอบ Tradefed ของคุณเอง คุณจะต้องใช้
IRemoteTest
และรับ ITestInvocationListener
ผ่านเมธอด run()
ใช้เครื่องมือฟังนี้
เพื่อบันทึกไฟล์ได้ดังนี้
listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);
ทดสอบด้วยอุปกรณ์
อินเทอร์เฟซขั้นต่ำด้านบนช่วยให้สามารถเรียกใช้การทดสอบที่เรียบง่ายมากซึ่งแยกกัน และไม่จำเป็นต้องใช้ทรัพยากรใดๆ เช่น การทดสอบหน่วยของ Java
ผู้เขียนการทดสอบที่ต้องการไปยังขั้นตอนถัดไปของการทดสอบอุปกรณ์จะต้องมีอินเทอร์เฟซต่อไปนี้
- IDeviceTest
ช่วยให้รับออบเจ็กต์
ITestDevice
ที่แสดงถึงอุปกรณ์ที่อยู่ภายใต้ การทดสอบและมี API สำหรับโต้ตอบกับออบเจ็กต์ดังกล่าว - IBuildReceiver
ช่วยให้การทดสอบได้รับออบเจ็กต์
IBuildInfo
ที่สร้างขึ้นใน ขั้นตอนของผู้ให้บริการบิลด์ ซึ่งมีข้อมูลและอาร์ติแฟกต์ทั้งหมดที่เกี่ยวข้องกับการตั้งค่าการทดสอบ
โดยปกติแล้ว Test Runner จะสนใจอินเทอร์เฟซเหล่านี้เพื่อรับอาร์ติแฟกต์ที่เกี่ยวข้องกับการดำเนินการ เช่น ไฟล์เพิ่มเติม และรับอุปกรณ์ภายใต้การทดสอบที่จะกำหนดเป้าหมายในระหว่างการดำเนินการ
ทดสอบกับอุปกรณ์หลายเครื่อง
Tradefed รองรับการทดสอบในอุปกรณ์หลายเครื่องพร้อมกัน ซึ่งจะมีประโยชน์เมื่อทดสอบคอมโพเนนต์ที่ต้องมีการโต้ตอบภายนอก เช่น การจับคู่โทรศัพท์กับนาฬิกา
หากต้องการเขียนโปรแกรมเรียกใช้การทดสอบที่ใช้อุปกรณ์หลายเครื่องได้ คุณจะต้อง
ใช้
IMultiDeviceTest
ซึ่งจะช่วยให้รับแผนที่จาก ITestDevice
ไปยัง IBuildInfo
ที่มี
รายการการแสดงอุปกรณ์ทั้งหมดและข้อมูลการสร้างที่เกี่ยวข้อง
ระบบจะเรียกใช้ตัวตั้งค่าจากอินเทอร์เฟซก่อนเมธอด run
เสมอ ดังนั้น
จึงถือได้ว่าโครงสร้างจะพร้อมใช้งานเมื่อมีการเรียกใช้ run
การทดสอบที่รับรู้การตั้งค่าของตนเอง
การติดตั้งใช้งานโปรแกรมเรียกใช้การทดสอบบางอย่างอาจต้องใช้ข้อมูลเกี่ยวกับการตั้งค่าโดยรวม
เพื่อให้ทำงานได้อย่างถูกต้อง เช่น ข้อมูลเมตาบางอย่างเกี่ยวกับการเรียกใช้ หรือ
target_preparer
ที่ทำงานก่อนหน้า เป็นต้น
เพื่อที่จะทำเช่นนี้ได้ โปรแกรมเรียกใช้การทดสอบจะเข้าถึงออบเจ็กต์ IConfiguration
ที่เป็นส่วนหนึ่งของออบเจ็กต์นั้นและที่ใช้ในการดำเนินการได้ ดูรายละเอียดเพิ่มเติมได้ที่คำอธิบาย
ออบเจ็กต์การกำหนดค่า
สำหรับการใช้งาน Test Runner คุณจะต้องใช้งาน IConfigurationReceiver
เพื่อรับออบเจ็กต์ IConfiguration
โปรแกรมเรียกใช้การทดสอบที่ยืดหยุ่น
โปรแกรมเรียกใช้การทดสอบสามารถให้วิธีที่ยืดหยุ่นในการเรียกใช้การทดสอบได้หากมีการควบคุมแบบละเอียด เช่น โปรแกรมเรียกใช้การทดสอบ JUnit สามารถเรียกใช้การทดสอบหน่วยแต่ละรายการแยกกันได้
ซึ่งช่วยให้สายรัดและโครงสร้างพื้นฐานขนาดใหญ่ใช้ประโยชน์จากการควบคุมที่ละเอียดยิ่งขึ้น และผู้ใช้สามารถเรียกใช้โปรแกรมเรียกใช้การทดสอบบางส่วนผ่านการกรอง
การรองรับการกรองอธิบายไว้ในอินเทอร์เฟซ ITestFilterReceiver
ซึ่งช่วยให้รับชุดตัวกรอง include
และ exclude
สำหรับการทดสอบที่ควรหรือไม่ควรเรียกใช้ได้
โดยทั่วไปแล้ว เราจะเรียกใช้การทดสอบก็ต่อเมื่อการทดสอบนั้นตรงกับตัวกรองรวมอย่างน้อย 1 รายการ และไม่ตรงกับตัวกรองยกเว้นใดๆ หากไม่ได้ระบุตัวกรองรวม ระบบจะเรียกใช้การทดสอบทั้งหมดตราบใดที่ตัวกรองเหล่านั้นไม่ตรงกับตัวกรองยกเว้น