เขียนโปรแกรมรันทดสอบ Tradefed

หน้านี้จะอธิบายวิธีเขียนตัวดำเนินการทดสอบใหม่ใน 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 จะจับคู่กับ รวมตัวกรอง และ ไม่ตรงกับตัวกรองยกเว้นใดๆ เลย หากไม่รวม จะได้รับตัวกรอง ควรทำการทดสอบทั้งหมดตราบใดที่ไม่ตรงกับ ตัวกรอง "ยกเว้น"