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