หน้านี้จะอธิบายวิธีเขียนตัวดำเนินการทดสอบใหม่ใน Tradefed
ฉากหลัง
หากสงสัยเกี่ยวกับตําแหน่งของ Test Runner ในสถาปัตยกรรม Tradefed ให้ดูโครงสร้างของ Test Runner
ซึ่งไม่ได้เป็นข้อกําหนดเบื้องต้นในการเขียนโปรแกรมทดสอบใหม่ โปรแกรมทดสอบสามารถเขียนแยกกันได้
ค่าต่ำสุด: ใช้งานอินเทอร์เฟซ
ข้อกำหนดขั้นต่ำในการเป็นโปรแกรมรันไทม์การทดสอบ Tradefed คือการใช้อินเทอร์เฟซ IRemoteTest และโดยเฉพาะเมธอด run(TestInformation testInfo, ITestInvocationListener listener)
วิธีการนี้เป็นวิธีที่ Harness เรียกใช้เมื่อใช้โปรแกรมรันทดสอบ ซึ่งคล้ายกับ Runnable ของ Java
ส่วนของวิธีการดังกล่าวถือเป็นส่วนหนึ่งของการดำเนินการทดสอบ
รายงานผลลัพธ์จากโปรแกรมรันทดสอบ
เมธอด run
ในอินเทอร์เฟซพื้นฐานให้สิทธิ์เข้าถึงออบเจ็กต์ Listener ประเภท ITestInvocationListener
ออบเจ็กต์นี้เป็นกุญแจสำคัญในการรายงานผลการทดสอบที่มีโครงสร้างจากโปรแกรมรันทดสอบไปยังฮาร์เนส
การรายงาน Structured Data จะทำให้โปรแกรมทดสอบมีพร็อพเพอร์ตี้ต่อไปนี้
- รายงานรายการที่เหมาะสมของการทดสอบทั้งหมดที่ทำการทดสอบ ระยะเวลาที่ใช้ และการทดสอบแต่ละรายการที่ผ่าน ไม่ผ่าน หรือสถานะอื่นๆ
- เมตริกรายงานที่เชื่อมโยงกับการทดสอบ (หากมี) เช่น เมตริกเวลาในการติดตั้ง
- ติดตั้งเครื่องมือด้านโครงสร้างพื้นฐานส่วนใหญ่ เช่น แสดงผลลัพธ์และเมตริก ฯลฯ
- มักจะแก้ไขข้อบกพร่องได้ง่ายกว่าเนื่องจากมีการติดตามการดำเนินการที่ละเอียดยิ่งขึ้น
อย่างไรก็ตาม การรายงาน Structured Result นั้นไม่บังคับ เครื่องมือทดสอบอาจต้องการประเมินสถานะของการเรียกใช้ทั้งหมดว่า "ผ่าน" หรือ "ไม่ผ่าน" โดยไม่ต้องแสดงรายละเอียดการดำเนินการจริง
ระบบสามารถเรียกเหตุการณ์ต่อไปนี้บน Listener เพื่อแจ้งเตือนการใช้ประโยชน์จากความคืบหน้าปัจจุบันของการดำเนินการได้
- testRunStarted: แจ้งการเริ่มต้นของกลุ่มชุดทดสอบที่เกี่ยวข้องกัน
- testStarted: แจ้งเตือนการเริ่มต้นกรอบการทดสอบที่เริ่มต้น
- testFailed/testIgnored: แจ้งการเปลี่ยนแปลงสถานะของข้อเท็จจริงการทดสอบที่กำลังดำเนินการ ระบบจะถือว่าการทดสอบผ่านหากไม่มีการเปลี่ยนแปลงสถานะ
- testEnded: แจ้งการสิ้นสุดของกรณีทดสอบ
- testRunFailed: แจ้งว่าสถานะโดยรวมของกลุ่มการดำเนินการสำหรับกรอบการทดสอบล้มเหลว การทดสอบการเรียกใช้อาจผ่านหรือไม่ผ่าน โดยไม่ขึ้นอยู่กับผลลัพธ์ของกรอบการทดสอบ ทั้งนี้ขึ้นอยู่กับสิ่งที่การดำเนินการคาดหวัง ตัวอย่างเช่น ไฟล์ไบนารีที่เรียกใช้หลายเฟรมทดสอบอาจรายงานเฟรมทดสอบทั้งหมดผ่าน แต่มีรหัสออกที่แสดงข้อผิดพลาด (ไม่ว่าด้วยเหตุผลใดก็ตาม เช่น ไฟล์ที่รั่วไหล ฯลฯ)
- testRunEnded: แจ้งการสิ้นสุดของกลุ่มกรณีทดสอบ
การรักษาและตรวจสอบว่าลำดับที่เหมาะสมของ Callback คือความรับผิดชอบของผู้ดำเนินการทดสอบ ตัวอย่างเช่น การตรวจสอบว่ามีการเรียกใช้ testRunEnded
ในกรณีที่มีข้อยกเว้นโดยใช้อนุประโยค finally
การติดต่อกลับของ Test Case (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
ที่มีรายการตัวแทนของอุปกรณ์ทั้งหมดและข้อมูลบิลด์ที่เกี่ยวข้อง
ระบบจะเรียกเมธอด setter จากอินเทอร์เฟซก่อนเมธอด run
เสมอ ดังนั้นจึงถือว่าโครงสร้างจะพร้อมใช้งานเมื่อเรียกใช้ run
การทดสอบที่ทราบการตั้งค่า
การติดตั้งใช้งานโปรแกรมรันทดสอบบางรายการอาจต้องใช้ข้อมูลเกี่ยวกับการตั้งค่าโดยรวมเพื่อให้ทํางานได้อย่างถูกต้อง เช่น ข้อมูลเมตาบางอย่างเกี่ยวกับการเรียกใช้ หรือ target_preparer
ที่เรียกใช้ก่อนหน้านี้ เป็นต้น
โปรแกรมรันทดสอบจึงเข้าถึงIConfiguration
ออบเจ็กต์ได้ซึ่งเป็นส่วนหนึ่งของโปรแกรมรันทดสอบและที่รันโปรแกรมรันทดสอบ ดูรายละเอียดเพิ่มเติมในคำอธิบายออบเจ็กต์การกําหนดค่า
สำหรับการติดตั้งใช้งานโปรแกรมรันทดสอบ คุณจะต้องติดตั้งใช้งาน IConfigurationReceiver เพื่อรับออบเจ็กต์ IConfiguration
เครื่องมือทดสอบที่ยืดหยุ่น
เครื่องมือเรียกใช้การทดสอบสามารถให้วิธีเรียกใช้การทดสอบที่ยืดหยุ่นได้หากมีการควบคุมแบบละเอียด เช่น เครื่องมือเรียกใช้การทดสอบ JUnit สามารถเรียกใช้การทดสอบแต่ละรายการแยกกันได้
วิธีนี้ช่วยให้ระบบควบคุมและโครงสร้างพื้นฐานที่ใหญ่กว่าใช้ประโยชน์จากการควบคุมแบบละเอียดนั้น และผู้ใช้เรียกใช้ตัวดำเนินการทดสอบบางส่วนผ่านการกรองได้
การรองรับการกรองจะอธิบายไว้ในอินเทอร์เฟซ ITestFilterReceiver ซึ่งช่วยให้รับชุดตัวกรอง include
และ exclude
สําหรับการทดสอบที่ควรหรือไม่ควรทํางานได้
รูปแบบของเราคือระบบจะเรียกใช้การทดสอบก็ต่อเมื่อการทดสอบตรงกับตัวกรองรวมอย่างน้อย 1 รายการ และไม่ตรงกับตัวกรองยกเว้นใดๆ หากไม่ได้ระบุตัวกรองการรวมไว้ ระบบจะเรียกใช้การทดสอบทั้งหมด ตราบใดที่การทดสอบไม่ตรงกับตัวกรองการยกเว้น