เขียนผู้ทดสอบ Tradefed

หน้านี้อธิบายวิธีเขียนตัวดำเนินการทดสอบใหม่ใน Tradefed

พื้นหลัง

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

นี่ไม่ใช่ข้อกำหนดเบื้องต้นในการเขียนนักวิ่งทดสอบรายใหม่ นักวิ่งทดสอบสามารถเขียนแยกกันได้

ขั้นต่ำเปล่า: ใช้อินเทอร์เฟซ

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

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

ทุกส่วนของวิธีการนั้นถือว่าเป็นส่วนหนึ่งของการดำเนินการทดสอบ

รายงานผลจากนักวิ่งทดสอบ

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

โดยการรายงานผลลัพธ์ที่มีโครงสร้าง ผู้ทดสอบจะมีคุณสมบัติดังต่อไปนี้:

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

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

ผู้ฟังสามารถเรียกเหตุการณ์ต่อไปนี้เพื่อแจ้งการควบคุมความคืบหน้าของการดำเนินการในปัจจุบัน:

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

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

การเรียกกลับกรณีทดสอบ ( 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 ซึ่งมีรายการการแสดงอุปกรณ์ทั้งหมดและข้อมูลการสร้างที่เกี่ยวข้อง

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

การทดสอบทราบถึงการตั้งค่า

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

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

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

นักวิ่งทดสอบที่ยืดหยุ่น

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

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

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

แบบแผนของเราคือการทดสอบจะดำเนินการ IFF ซึ่งตรงกับตัวกรองรวมอย่างน้อย 1 รายการ และไม่ตรงกับตัวกรองยกเว้นใดๆ หากไม่มีการกำหนดตัวกรองรวม การทดสอบทั้งหมดควรดำเนินการตราบเท่าที่ไม่ตรงกับตัวกรองที่ยกเว้นใดๆ