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

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

ตัวสะสมเมทริกที่ซื้อขายกัน

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

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

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

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

ตัวอย่าง:

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

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

ทางด้านเครื่อง

เมื่อรันการทดสอบฝั่งอุปกรณ์ (Instrumentations, การทดสอบ 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 ของคุณ