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

หน้านี้อธิบายวิธีรายงานเมตริกพร้อมกับผลการทดสอบเมื่อเขียนการทดสอบใน 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 จากคลาส TestCase ของ JUnit3 ปกติ จะต้องแปลงเป็น 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 เพื่อรวบรวมเมตริกจากฝั่งโฮสต์และรายงานเมตริกเหล่านั้นเป็นส่วนหนึ่งของการเรียกใช้การทดสอบ เรามีเครื่องมือรวบรวมทั่วไปจํานวนหนึ่งสําหรับกรณีการใช้งานต่างๆ แล้ว แต่เรายินดีรับการมีส่วนร่วมใหม่ๆ เสมอ

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

ตัวอย่าง

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

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

ทางฝั่งอุปกรณ์

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

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

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

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

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

  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