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

หน้านี้จะอธิบายวิธีรายงานเมตริกพร้อมด้วยผลการทดสอบขณะเขียน การทดสอบใน 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 Test ของคุณเอง คุณจะเห็น IRemoteTest และรับ ITestInvocationListener ผ่านเมธอด run() Listener นี้ สามารถใช้ในการบันทึกเมตริกดังต่อไปนี้

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

ผู้สะสมเมตริกที่มีการซื้อขาย

Tradefed มีออบเจ็กต์ metrics_collector เฉพาะสำหรับรวบรวมเมตริกใน ควบคู่ไปกับการทดสอบ

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

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

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

ตัวอย่าง

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

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

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

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

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

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

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

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

  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 ทดสอบในไฟล์ "สร้าง":
  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