หน้านี้อธิบายวิธีเขียนตัวดำเนินการทดสอบใหม่ใน Tradefed
พื้นหลัง
หากคุณสงสัยเกี่ยวกับสถานที่ของนักวิ่งทดสอบในสถาปัตยกรรม Tradefed ให้ดูที่ โครงสร้างของนักวิ่งทดสอบ
นี่ไม่ใช่ข้อกำหนดเบื้องต้นในการเขียนนักวิ่งทดสอบใหม่ นักวิ่งทดสอบสามารถเขียนแยกได้
ขั้นต่ำสุด: การใช้อินเทอร์เฟซ
ขั้นต่ำเปล่าที่จะมีคุณสมบัติเป็นผู้ดำเนินการทดสอบ Tradefed คือการนำ อินเทอร์เฟซ IRemoteTest ไปใช้และโดยเฉพาะอย่างยิ่งเมธอดการ run(TestInformation testInfo, ITestInvocationListener listener)
วิธีนี้เป็นวิธีที่สายรัดเรียกใช้เมื่อใช้ตัวทดสอบ คล้ายกับ Java Runnable
ทุกส่วนของวิธีการนั้นถือว่าเป็นส่วนหนึ่งของการดำเนินการของผู้ทดสอบ
รายงานผลผู้เข้าสอบ
เมธอด run
ในอินเทอร์เฟซพื้นฐานให้การเข้าถึงอ็อบเจ็กต์ listener ประเภท ITestInvocationListener
วัตถุนี้เป็นกุญแจสำคัญในการรายงานผลลัพธ์ที่มีโครงสร้างตั้งแต่ตัววิ่งทดสอบไปยังสายรัด
การรายงานผลลัพธ์แบบมีโครงสร้าง ผู้ดำเนินการทดสอบมีคุณสมบัติดังต่อไปนี้:
- รายงานรายการการทดสอบทั้งหมดที่ถูกต้อง ระยะเวลาที่พวกเขาทำ และหากแต่ละการทดสอบผ่าน ล้มเหลว หรือสถานะอื่นๆ
- รายงานตัวชี้วัดที่เกี่ยวข้องกับการทดสอบ หากมี เช่น ตัวชี้วัดเวลาการติดตั้ง
- พอดีกับเครื่องมือโครงสร้างพื้นฐานส่วนใหญ่ เช่น แสดงผลและเมตริก เป็นต้น
- มักจะง่ายต่อการดีบักเนื่องจากมีการติดตามการดำเนินการที่ละเอียดยิ่งขึ้น
ที่กล่าวว่าการรายงานผลลัพธ์ที่มีโครงสร้างเป็นทางเลือก นักวิ่งทดสอบอาจเพียงแค่ต้องการประเมินสถานะของการวิ่งทั้งหมดว่า PASSED หรือ FAILED โดยไม่มีรายละเอียดใดๆ ของการดำเนินการจริง
หมายเหตุ: การนำนักวิ่งที่เป็นไปตามลำดับของเหตุการณ์ไปใช้ทำได้ยากกว่า แต่เราขอแนะนำให้ดำเนินการตามประโยชน์ที่ระบุไว้ข้างต้น
ผู้ฟังสามารถเรียกเหตุการณ์ต่อไปนี้เพื่อแจ้งผู้ควบคุมถึงความคืบหน้าของการประหารชีวิตในปัจจุบัน:
- 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
การทดสอบทราบการตั้งค่าของพวกเขา
หมายเหตุ: กรณีนี้ไม่ใช่กรณีใช้งานทั่วไป มีการบันทึกไว้เพื่อความสมบูรณ์ แต่โดยปกติคุณไม่จำเป็นต้องใช้
การใช้งานตัวดำเนินการทดสอบบางอย่างอาจต้องการข้อมูลเกี่ยวกับการตั้งค่าโดยรวมเพื่อให้ทำงานได้อย่างถูกต้อง ตัวอย่างเช่น ข้อมูลเมตาบางส่วนเกี่ยวกับการเรียกใช้ หรือ target_preparer
ที่เรียกใช้ก่อนหน้านี้ เป็นต้น
เพื่อให้บรรลุสิ่งนี้ ผู้ทดสอบสามารถเข้าถึงอ็อบเจ็กต์ IConfiguration
ที่มันเป็นส่วนหนึ่งและดำเนินการได้ ดูรายละเอียดเพิ่มเติมที่คำอธิบาย ออบเจ็กต์การกำหนดค่า
สำหรับการใช้งานตัววิ่งทดสอบ คุณจะต้องใช้ IConfigurationReceiver เพื่อรับวัตถุ IConfiguration
ตัววิ่งทดสอบที่ยืดหยุ่น
นักวิ่งทดสอบสามารถให้วิธีดำเนินการทดสอบที่ยืดหยุ่นได้หากมีการควบคุมที่ละเอียด ตัวอย่างเช่น นักวิ่งทดสอบ JUnit สามารถเรียกใช้การทดสอบแต่ละหน่วยได้ทีละรายการ
ซึ่งช่วยให้สายรัดและโครงสร้างพื้นฐานขนาดใหญ่ใช้ประโยชน์จากการควบคุมที่ดีนั้น และผู้ใช้สามารถเรียกใช้ตัวดำเนินการทดสอบบางส่วนผ่านการ กรอง
การสนับสนุนการกรองมีอธิบายไว้ใน อินเทอร์เฟซ ITestFilterReceiver ซึ่งช่วยให้สามารถรับชุดตัวกรองที่ include
และ exclude
ตัวกรองสำหรับการทดสอบที่ควรหรือไม่ควรเรียกใช้
หลักการของเราคือ การทดสอบจะดำเนินการ IFF ซึ่งตรงกับตัวกรองรวมอย่างน้อยหนึ่งรายการ และไม่ตรงกับตัวกรองที่ยกเว้นใดๆ หากไม่ได้ระบุตัวกรองที่รวมไว้ การทดสอบทั้งหมดควรรันตราบเท่าที่ไม่ตรงกับตัวกรองที่ยกเว้นใดๆ
หมายเหตุ: เราสนับสนุนให้เขียนนักวิ่งทดสอบในลักษณะที่สนับสนุนการกรองนี้ เนื่องจากให้มูลค่าเพิ่มมหาศาลในโครงสร้างพื้นฐานขนาดใหญ่ แต่เราเข้าใจดีว่าในบางกรณีไม่สามารถทำได้