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