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