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