เขียน Tradefed Test Runner

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

พื้นหลัง

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

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

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

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

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

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

รายงานผลผู้เข้าสอบ

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

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

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

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

หมายเหตุ: การนำนักวิ่งที่เป็นไปตามลำดับของเหตุการณ์ไปใช้ทำได้ยากกว่า แต่เราขอแนะนำให้ดำเนินการตามประโยชน์ที่ระบุไว้ข้างต้น

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

  • 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

การทดสอบทราบการตั้งค่าของพวกเขา

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

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

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

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

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

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

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

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

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

หมายเหตุ: เราสนับสนุนให้เขียนนักวิ่งทดสอบในลักษณะที่สนับสนุนการกรองนี้ เนื่องจากให้มูลค่าเพิ่มมหาศาลในโครงสร้างพื้นฐานขนาดใหญ่ แต่เราเข้าใจดีว่าในบางกรณีไม่สามารถทำได้