เขียนตัวดำเนินการทดสอบที่เทรด

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