รายงานเมตริกหรือข้อมูลจากการทดสอบ Tradefed

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

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

DeviceTestCase - รูปแบบ JUnit3

หากการทดสอบขยาย DeviceTestCase ในการทดสอบรูปแบบ JUnit3 คุณจะเรียกใช้เมธอด addTestMetric(String key, String value) จากภายในกรณีทดสอบใดก็ได้เพื่อรายงาน เมตริก คุณเรียกใช้ฟังก์ชันนี้ได้หลายครั้งตราบใดที่คีย์ไม่ซ้ำกัน

ตัวอย่าง

    public static class TestMetricTestCase extends DeviceTestCase {

        public void testPass() {
            addTestMetric("key1", "metric1");
        }

        public void testPass2() {
            addTestMetric("key2", "metric2");
        }
    }

หากต้องการบันทึกไฟล์เพื่อให้พร้อมใช้งานใน result_reporters คุณสามารถ เรียกใช้เมธอด addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream) จากภายในกรณีทดสอบใดก็ได้เพื่อรายงานไฟล์ที่จะบันทึก

ตัวอย่าง

    public static class TestLogTestCase extends DeviceTestCase {

        public void testPass() {
            try (InputStreamSource source = getDevice().getScreenshot()) {
                addTestLog("screenshot", LogDataType.PNG, source);
            }
        }
    }

TestCase - การทดสอบ JUnit3 ปกติ

หากต้องการรายงานเมตริกภายใน Tradefed จากคลาส JUnit3 TestCase ปกติ คุณจะต้องแปลงเป็น MetricTestCase แทน ซึ่งเป็นคลาสเดียวกัน ทุกประการที่มีเมธอดเพิ่มเติมคือ addTestMetric(String key, String value)

DeviceJUnit4ClassRunner - รูปแบบ JUnit4

หากการทดสอบสไตล์ JUnit4 ทำงานด้วย DeviceJUnit4ClassRunner คุณจะบันทึกเมตริกภายในกรณีทดสอบ (ภายใน @Test) เพื่อให้ Tradefed รายงานได้ด้วย คุณจะต้องใช้TestMetricsกฎเพื่อรายงานเมตริก

ตัวอย่าง

    @RunWith(DeviceJUnit4ClassRunner.class)
    public static class Junit4TestClass {

        @Rule
        public TestMetrics metrics = new TestMetrics();

        @Test
        public void testPass5() {
            // test log through the rule.
            metrics.addTestMetric("key", "value");
        }

        @Test
        public void testPass6() {
            metrics.addTestMetric("key2", "value2");
        }
    }

หากต้องการรายงานไฟล์ คุณจะต้องใช้TestLogDataกฎเพื่อรายงาน

ตัวอย่าง

    @RunWith(DeviceJUnit4ClassRunner.class)
    public static class Junit4TestClass {

        @Rule
        public TestLogData logs = new TestLogData();

        @Test
        public void testPass5() {
            // test log through the rule.
            try (InputStreamSource source = getDevice().getScreenshot()) {
                logs.addTestLog("screenshot", LogDataType.PNG, source);
            }
        }
    }

IRemoteTest - การทดสอบ Tradefed อย่างแท้จริง

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

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

เครื่องมือรวบรวมเมตริก Tradefed

Tradefed มีออบเจ็กต์ metrics_collector โดยเฉพาะเพื่อรวบรวมเมตริกในการทดสอบแบบ ขนาน

ทางฝั่งโฮสต์

BaseDeviceMetricCollector สามารถนำไปใช้เพื่อรวบรวมเมตริกจากฝั่งโฮสต์และรายงานเมตริกเหล่านั้น เป็นส่วนหนึ่งของการเรียกใช้การทดสอบ ปัจจุบันมีตัวรวบรวมทั่วไปหลายตัวที่พร้อมใช้งานสำหรับ Use Case ต่างๆ แต่เรายินดีรับการมีส่วนร่วมใหม่ๆ เสมอ

หากต้องการระบุตัวรวบรวมที่จะใช้ในการเรียกใช้ Tradefed คุณเพียงแค่ต้องเพิ่มออบเจ็กต์ลงในการกำหนดค่า XML ของ Tradefed ดังนี้

ตัวอย่าง

  <metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
      <option name="categories" value="freq"/>
  </metrics_collector>

ตัวรวบรวมที่มีอยู่ในปัจจุบันบางส่วนมีดังนี้ * TemperatureCollector ซึ่งจะรวบรวมอุณหภูมิเป็นระยะๆ ระหว่างการทดสอบ * AtraceCollector ที่รวบรวมโดยใช้ "atrace" สำหรับกรณีทดสอบแต่ละรายการ

ในฝั่งอุปกรณ์

เมื่อเรียกใช้การทดสอบฝั่งอุปกรณ์ (การทดสอบเครื่องมือ, การทดสอบ UIAutomator ฯลฯ) การมีตัวรวบรวมในฝั่งโฮสต์ที่รวบรวมแบบไม่พร้อมกันอาจไม่ เหมาะสม เช่น ภาพหน้าจอที่ถ่ายแบบไม่พร้อมกันมักจะพลาดหน้าจอที่ต้องการและไม่มีประโยชน์

เพื่อให้เป็นไปตามกรณีการใช้งานเหล่านี้ เราจึงมีตัวรวบรวมเวอร์ชันฝั่งอุปกรณ์ และสามารถใช้ในการตรวจสอบ "AndroidJUnitRunner" ได้ BaseMetricListener สามารถนำไปใช้เพื่อรายงานเมตริกที่รวบรวมโดยอัตโนมัติ ในลักษณะที่เข้ากันได้อย่างสมบูรณ์กับไปป์ไลน์การรายงานของ Tradefed

หากใช้โปรแกรมเรียกใช้ AndroidJUnitTest จาก Tradefed คุณเพียงแค่ระบุตัวเลือกบรรทัดคำสั่งต่อไปนี้ เพื่อให้ตัวรวบรวมทำงานร่วมกับการทดสอบ

  --device-listeners android.device.collectors.ScreenshotListener

ข้อควรระวัง: APK ของเครื่องมือวัดส่วนใหญ่จะต้องรวมคลาสของตัวรวบรวมแบบคงที่โดยการเพิ่มข้อมูลต่อไปนี้ลงในไฟล์ Makefile เพื่อให้คลาสของตัวรวบรวมได้รับการแก้ไขในเวลาเรียกใช้

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

นอกจากนี้ เรายังยินดีรับการมีส่วนร่วมในตัวรวบรวมข้อมูลฝั่งอุปกรณ์ด้วย

ข้อควรพิจารณาพิเศษสำหรับห้องสวีท

สำหรับชุดทดสอบอย่าง CTS ที่มีการกำหนดค่าระดับบนสุดซึ่งเรียกใช้การกำหนดค่าโมดูลบางอย่าง ไม่จำเป็นต้องระบุ metrics_collector ในการกำหนดค่าโมดูลแต่ละรายการ (AndroidTest.xml) และห้ามระบุด้วย

เพื่อให้มั่นใจว่าการรวบรวมเมตริกจะมีผลกับแต่ละโมดูลอย่างเท่าเทียมกัน เฉพาะการกำหนดค่าระดับบนสุด (เช่น cts.xml) เท่านั้นที่ระบุ metrics_collector ได้ ตามที่อธิบายไว้ข้างต้น ระบบจะใช้และเรียกใช้ตัวรวบรวมเหล่านี้ กับแต่ละโมดูลของชุด

รวบรวมไฟล์บันทึกของอุปกรณ์จากโมดูล

มีการตั้งค่าเพื่อให้การทดสอบฝั่งอุปกรณ์แจ้งเตือนว่าควรเก็บรวบรวมไฟล์บางไฟล์

AndroidTest.xml สามารถระบุตัวรวบรวมที่จะค้นหาไฟล์ใน อุปกรณ์และดึงไฟล์เหล่านั้นได้

  <metrics_collector class="com.android.tradefed.device.metric.FilePullerLogCollector">
      <!-- repeatable: Pattern of key of a FILE we listen on that should be pulled -->
      <option name = "pull-pattern-keys" value = "ScreenshotListener_.*" />

      <!-- repeatable: The key of the DIRECTORY to pull -->
      <option name = "directory-keys" value = "<example-key: /sdcard/atrace_logs>" />
  </metrics_collector>

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

หากต้องการสร้างคีย์เหล่านี้ การทดสอบฝั่งอุปกรณ์ (การวัด) ควรระบุไฟล์ที่ควรบันทึก โดยจะดำเนินการในลักษณะที่คล้ายกัน กับฝั่งโฮสต์ (อธิบายไว้ข้างต้น)

  1. เพิ่ม collector-device-lib ลงใน APK ทดสอบในไฟล์ Make ดังนี้
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. ใช้ @rule ที่เราให้ไว้เพื่อบันทึกไฟล์
    @RunWith(AndroidJUnit4.class)
    public static class Junit4TestClass {

        @Rule
        public TestLogData logs = new TestLogData();

        @Test
        public void testPass5() {
            // test log through the rule.
            File logFile = new File("whatever");
            logs.addTestLog("KEY", logFile);
        }
    }

ชื่อ KEY ในตัวอย่างด้านบนคือชื่อที่ใช้รายงานไฟล์ นี่คือชื่อที่คุณควรจับคู่ใน FilePullerDeviceMetricCollector เพื่อให้ระบบดึงข้อมูลโดยอัตโนมัติ ชื่อควร ไม่ซ้ำกัน

หมายเหตุ: เมื่อดึงไฟล์แล้ว FilePullerDeviceMetricCollector จะล้างไฟล์ออกจากอุปกรณ์โดยอัตโนมัติ

ฉันจะดูเมตริกได้จากที่ใด

โดยขึ้นอยู่กับ result_reporter ที่ระบุในการกำหนดค่า XML