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

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

ตัวรวบรวมตัวชี้วัดที่ Tradefed

Tradefed จัดเตรียมออบเจ็กต์ metrics_collector เฉพาะเพื่อรวบรวมการวัดควบคู่ไปกับการทดสอบ

ทางด้านเจ้าบ้าน

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

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

ตัวอย่าง:

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

ตัวสะสมที่มีอยู่ในปัจจุบันบางส่วน: * ตัวสะสมอุณหภูมิ ที่รวบรวมอุณหภูมิเป็นระยะระหว่างการทดสอบ * 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 ของคุณ