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

หน้านี้อธิบายวิธีเขียนโปรแกรมเรียกใช้การทดสอบใหม่ใน Tradefed

ฉากหลัง

หากคุณสงสัยเกี่ยวกับตำแหน่งของโปรแกรมเรียกใช้การทดสอบในสถาปัตยกรรม Tradefed โปรดดูโครงสร้างของโปรแกรมเรียกใช้การทดสอบ

ทั้งนี้ไม่จำเป็นต้องมีข้อกำหนดเบื้องต้นในการเขียน Test Runner ใหม่ Test Runner สามารถเขียนแยกกันได้

ขั้นต่ำ: ใช้การติดตั้งใช้งานอินเทอร์เฟซ

ข้อกำหนดขั้นต่ำในการมีสิทธิ์เป็นโปรแกรมเรียกใช้การทดสอบ Tradefed คือการติดตั้งใช้งานอินเทอร์เฟซ IRemoteTest และโดยเฉพาะอย่างยิ่งเมธอด run(TestInformation testInfo, ITestInvocationListener listener)

วิธีนี้เป็นวิธีที่ Harness เรียกใช้เมื่อใช้ Test Runner ซึ่งคล้ายกับ Java Runnable

ทุกส่วนของวิธีการดังกล่าวถือเป็นส่วนหนึ่งของการดำเนินการโปรแกรมเรียกใช้การทดสอบ

รายงานผลลัพธ์จากเครื่องมือเรียกใช้การทดสอบ

เมธอด run ในอินเทอร์เฟซพื้นฐานจะให้สิทธิ์เข้าถึงออบเจ็กต์ Listener ของ ประเภท ITestInvocationListener ออบเจ็กต์นี้เป็นคีย์สําคัญในการรายงานผลลัพธ์ที่มีโครงสร้างจากเครื่องมือเรียกใช้การทดสอบไปยัง Harness

การรายงานผลลัพธ์ที่มีโครงสร้างทำให้โปรแกรมเรียกใช้การทดสอบมีคุณสมบัติดังต่อไปนี้

  • รายงานรายการที่เหมาะสมของการทดสอบทั้งหมดที่เรียกใช้ ระยะเวลาที่ใช้ และผลการทดสอบแต่ละรายการว่าผ่าน ไม่ผ่าน หรืออยู่ในสถานะอื่นๆ
  • รายงานเมตริกที่เชื่อมโยงกับการทดสอบ หากมี เช่น เมตริกเวลาในการติดตั้ง
  • เหมาะกับเครื่องมือโครงสร้างพื้นฐานส่วนใหญ่ เช่น แสดงผลลัพธ์และ เมตริก ฯลฯ
  • โดยปกติแล้วจะแก้ไขข้อบกพร่องได้ง่ายกว่าเนื่องจากมีการติดตามการ ดำเนินการที่ละเอียดยิ่งขึ้น

อย่างไรก็ตาม การรายงานผลลัพธ์ที่มีโครงสร้างเป็นทางเลือก ผู้ทดสอบอาจเพียงต้องการประเมินสถานะของการทดสอบทั้งหมดเป็น "ผ่าน" หรือ "ไม่ผ่าน" โดยไม่ต้องมีรายละเอียดของการดำเนินการจริง

คุณเรียกใช้เหตุการณ์ต่อไปนี้ใน Listener เพื่อแจ้งให้ Harness ทราบถึงความคืบหน้าปัจจุบันของการดำเนินการได้

  • testRunStarted: แจ้งการเริ่มต้นกลุ่มของกรณีทดสอบที่ เกี่ยวข้องด้วยกัน
    • testStarted: แจ้งการเริ่มต้นของกรณีทดสอบ
    • testFailed/testIgnored: แจ้งการเปลี่ยนแปลงสถานะของกรณีทดสอบ ที่กำลังดำเนินการ ระบบจะถือว่ากรณีทดสอบที่ไม่มีการเปลี่ยนแปลงสถานะ ผ่าน
    • testEnded: แจ้งการสิ้นสุดของกรณีทดสอบ
  • testRunFailed: แจ้งว่าสถานะโดยรวมของการดำเนินการกลุ่มกรณีทดสอบ ไม่สำเร็จ การทดสอบอาจผ่านหรือไม่ผ่าน โดยไม่ขึ้นอยู่กับผลลัพธ์ของกรณีทดสอบ ทั้งนี้ขึ้นอยู่กับสิ่งที่ การดำเนินการคาดหวัง เช่น ไบนารีที่เรียกใช้กรณีทดสอบหลายรายการ อาจรายงานกรณีทดสอบที่ผ่านทั้งหมด แต่มีรหัสทางออกของข้อผิดพลาด (ไม่ว่าด้วยเหตุผลใดก็ตาม เช่น ไฟล์รั่ว ฯลฯ)
  • testRunEnded: แจ้งการสิ้นสุดกลุ่มของกรณีทดสอบ

การดูแลรักษาและตรวจสอบว่ามีการเรียกกลับตามลำดับที่ถูกต้องเป็นความรับผิดชอบของผู้ใช้โปรแกรมเรียกใช้การทดสอบ เช่น การตรวจสอบว่ามีการเรียกใช้ testRunEnded ในกรณีที่มีข้อยกเว้นโดยใช้คําสั่ง finally

การติดต่อกลับสำหรับกรณีทดสอบ (testStarted, testEnded ฯลฯ) เป็นการดำเนินการที่ไม่บังคับ การทดสอบ อาจเกิดขึ้นโดยไม่มีกรณีทดสอบ

คุณอาจสังเกตเห็นว่าโครงสร้างเหตุการณ์นี้ได้รับแรงบันดาลใจจากโครงสร้าง JUnit ทั่วไป เราตั้งใจให้เป็นเช่นนี้เพื่อคงไว้ซึ่งสิ่งพื้นฐานที่นักพัฒนาซอฟต์แวร์ มักจะมีความรู้

รายงานบันทึกจากโปรแกรมเรียกใช้การทดสอบ

หากคุณกำลังเขียนคลาสหรือโปรแกรมเรียกใช้การทดสอบ Tradefed ของคุณเอง คุณจะต้องใช้ IRemoteTest และรับ ITestInvocationListener ผ่านเมธอด run() ใช้เครื่องมือฟังนี้ เพื่อบันทึกไฟล์ได้ดังนี้

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

ทดสอบด้วยอุปกรณ์

อินเทอร์เฟซขั้นต่ำด้านบนช่วยให้สามารถเรียกใช้การทดสอบที่เรียบง่ายมากซึ่งแยกกัน และไม่จำเป็นต้องใช้ทรัพยากรใดๆ เช่น การทดสอบหน่วยของ Java

ผู้เขียนการทดสอบที่ต้องการไปยังขั้นตอนถัดไปของการทดสอบอุปกรณ์จะต้องมีอินเทอร์เฟซต่อไปนี้

  • IDeviceTest ช่วยให้รับออบเจ็กต์ ITestDevice ที่แสดงถึงอุปกรณ์ที่อยู่ภายใต้ การทดสอบและมี API สำหรับโต้ตอบกับออบเจ็กต์ดังกล่าว
  • IBuildReceiver ช่วยให้การทดสอบได้รับออบเจ็กต์ IBuildInfo ที่สร้างขึ้นใน ขั้นตอนของผู้ให้บริการบิลด์ ซึ่งมีข้อมูลและอาร์ติแฟกต์ทั้งหมดที่เกี่ยวข้องกับการตั้งค่าการทดสอบ

โดยปกติแล้ว Test Runner จะสนใจอินเทอร์เฟซเหล่านี้เพื่อรับอาร์ติแฟกต์ที่เกี่ยวข้องกับการดำเนินการ เช่น ไฟล์เพิ่มเติม และรับอุปกรณ์ภายใต้การทดสอบที่จะกำหนดเป้าหมายในระหว่างการดำเนินการ

ทดสอบกับอุปกรณ์หลายเครื่อง

Tradefed รองรับการทดสอบในอุปกรณ์หลายเครื่องพร้อมกัน ซึ่งจะมีประโยชน์เมื่อทดสอบคอมโพเนนต์ที่ต้องมีการโต้ตอบภายนอก เช่น การจับคู่โทรศัพท์กับนาฬิกา

หากต้องการเขียนโปรแกรมเรียกใช้การทดสอบที่ใช้อุปกรณ์หลายเครื่องได้ คุณจะต้อง ใช้ IMultiDeviceTest ซึ่งจะช่วยให้รับแผนที่จาก ITestDevice ไปยัง IBuildInfo ที่มี รายการการแสดงอุปกรณ์ทั้งหมดและข้อมูลการสร้างที่เกี่ยวข้อง

ระบบจะเรียกใช้ตัวตั้งค่าจากอินเทอร์เฟซก่อนเมธอด run เสมอ ดังนั้น จึงถือได้ว่าโครงสร้างจะพร้อมใช้งานเมื่อมีการเรียกใช้ run

การทดสอบที่รับรู้การตั้งค่าของตนเอง

การติดตั้งใช้งานโปรแกรมเรียกใช้การทดสอบบางอย่างอาจต้องใช้ข้อมูลเกี่ยวกับการตั้งค่าโดยรวม เพื่อให้ทำงานได้อย่างถูกต้อง เช่น ข้อมูลเมตาบางอย่างเกี่ยวกับการเรียกใช้ หรือ target_preparer ที่ทำงานก่อนหน้า เป็นต้น

เพื่อที่จะทำเช่นนี้ได้ โปรแกรมเรียกใช้การทดสอบจะเข้าถึงออบเจ็กต์ IConfiguration ที่เป็นส่วนหนึ่งของออบเจ็กต์นั้นและที่ใช้ในการดำเนินการได้ ดูรายละเอียดเพิ่มเติมได้ที่คำอธิบาย ออบเจ็กต์การกำหนดค่า

สำหรับการใช้งาน Test Runner คุณจะต้องใช้งาน IConfigurationReceiver เพื่อรับออบเจ็กต์ IConfiguration

โปรแกรมเรียกใช้การทดสอบที่ยืดหยุ่น

โปรแกรมเรียกใช้การทดสอบสามารถให้วิธีที่ยืดหยุ่นในการเรียกใช้การทดสอบได้หากมีการควบคุมแบบละเอียด เช่น โปรแกรมเรียกใช้การทดสอบ JUnit สามารถเรียกใช้การทดสอบหน่วยแต่ละรายการแยกกันได้

ซึ่งช่วยให้สายรัดและโครงสร้างพื้นฐานขนาดใหญ่ใช้ประโยชน์จากการควบคุมที่ละเอียดยิ่งขึ้น และผู้ใช้สามารถเรียกใช้โปรแกรมเรียกใช้การทดสอบบางส่วนผ่านการกรอง

การรองรับการกรองอธิบายไว้ในอินเทอร์เฟซ ITestFilterReceiver ซึ่งช่วยให้รับชุดตัวกรอง include และ exclude สำหรับการทดสอบที่ควรหรือไม่ควรเรียกใช้ได้

โดยทั่วไปแล้ว เราจะเรียกใช้การทดสอบก็ต่อเมื่อการทดสอบนั้นตรงกับตัวกรองรวมอย่างน้อย 1 รายการ และไม่ตรงกับตัวกรองยกเว้นใดๆ หากไม่ได้ระบุตัวกรองรวม ระบบจะเรียกใช้การทดสอบทั้งหมดตราบใดที่ตัวกรองเหล่านั้นไม่ตรงกับตัวกรองยกเว้น