Google is committed to advancing racial equity for Black communities. See how.
Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Cara melaporkan metrik atau data dari tes Tradefed

Halaman ini menjelaskan cara melaporkan metrik bersama dengan hasil tes saat menulis tes di Tradefed.

Manfaat masuk melalui pipeline Tradefed adalah menemukan metrik Anda di samping hasil fungsional Anda. Pencatatan metrik dapat dilakukan secara alami dalam pengujian, yang memudahkan penulis pengujian untuk menambahkan lebih banyak instrumentasi.

DeviceTestCase - gaya JUnit3

Jika pengujian Anda memperluas DeviceTestCase dalam jenis pengujian gaya JUnit3 , Anda dapat memanggil metode addTestMetric(String key, String value) dari dalam kasus pengujian apa pun untuk melaporkan metrik. Ini bisa dipanggil beberapa kali selama kuncinya unik.

Contoh:

    public static class TestMetricTestCase extends DeviceTestCase {

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

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

Jika Anda ingin memasukkan file agar tersedia di result_reporters , Anda dapat memanggil metode addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream) dari dalam kasus pengujian apa pun untuk melaporkan file ke log.

Contoh:

    public static class TestLogTestCase extends DeviceTestCase {

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

TestCase - tes JUnit3 biasa

Jika Anda ingin melaporkan metrik di dalam Tradefed dari kelas JUnit3 TestCase biasa, itu perlu diubah menjadi MetricTestCase yang merupakan kelas yang sama persis dengan metode tambahan: addTestMetric(String key, String value)

DeviceJUnit4ClassRunner - gaya JUnit4

Jika pengujian gaya JUnit4 Anda berjalan dengan DeviceJUnit4ClassRunner , Anda juga dapat mencatat metrik dalam kasus uji (di dalam @Test) untuk dilaporkan oleh Tradefed. Anda perlu menggunakan aturan TestMetrics untuk melaporkan metrik Anda.

Contoh:

    @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");
        }
    }

Untuk melaporkan file, Anda akan menggunakan aturan TestLogData untuk melaporkannya.

Contoh:

    @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 - Uji Tradefed murni

Jika Anda menulis kelas atau runner Tes Tradefed Anda sendiri, Anda akan mengimplementasikan IRemoteTest dan mendapatkan ITestInvocationListener melalui metode run() . Listener ini dapat digunakan untuk mencatat metrik sebagai berikut:

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

Pengumpul metrik tradefed

Tradefed menyediakan objek metrics_collector khusus untuk mengumpulkan metrik secara paralel dari pengujian.

Di sisi tuan rumah

BaseDeviceMetricCollector dapat diimplementasikan untuk mengumpulkan metrik apa pun dari sisi host dan melaporkannya sebagai bagian dari permintaan pengujian. Sejumlah kolektor umum telah tersedia untuk berbagai kasus penggunaan, tetapi kami selalu menerima kontribusi baru.

Untuk menentukan collector yang akan digunakan dalam permintaan Tradefed Anda, Anda hanya perlu menambahkan objek ke konfigurasi XML Tradefed Anda:

Contoh:

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

Beberapa kolektor yang ada saat ini: * TemperatureCollector yang mengumpulkan suhu secara berkala selama pengujian berjalan. * AtraceCollector yang mengumpulkan menggunakan 'atrace' untuk setiap kasus uji.

Di sisi perangkat

Saat menjalankan pengujian sisi perangkat (Instrumentasi, pengujian UIAutomator, dll.), Memiliki kolektor di sisi host yang mengumpulkan secara asinkron mungkin tidak ideal. Misalnya, tangkapan layar yang diambil secara asinkron kemungkinan besar akan kehilangan layar yang diinginkan dan menjadi tidak berguna.

Untuk memenuhi kasus penggunaan ini, ada versi sisi perangkat dari kolektor kami dan dapat digunakan di instrumentasi 'AndroidJUnitRunner' apa pun. BaseMetricListener dapat diimplementasikan untuk secara otomatis melaporkan metrik yang dikumpulkan dengan cara yang sepenuhnya kompatibel dengan pipeline pelaporan Tradefed.

Jika Anda menggunakan runner ' AndroidJUnitTest ' dari Tradefed, Anda cukup menentukan opsi baris perintah berikut agar kolektor Anda berjalan dengan pengujian Anda:

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

PERHATIAN: Agar class collector diselesaikan pada waktu proses, APK instrumentasi Anda kemungkinan besar perlu menyertakannya secara statis dengan menambahkan berikut ini ke makefile Anda:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

Kontribusi untuk kolektor sisi perangkat juga diterima.

Pertimbangan khusus untuk suite

Untuk suite seperti CTS yang memiliki konfigurasi level teratas yang menjalankan beberapa konfigurasi modul, Anda tidak perlu menentukan metrics_collector di setiap konfigurasi modul ( AndroidTest.xml ). Itu sebenarnya dilarang.

Untuk memastikan kumpulan metrik diterapkan secara merata ke setiap modul, hanya konfigurasi tingkat atas (misalnya, cts.xml ) yang dapat menentukan metrics_collector seperti yang dijelaskan di atas. Kolektor ini akan diterapkan dan dijalankan pada setiap modul suite.

Bagaimana cara mengumpulkan file log perangkat dari modul?

Penyiapan tersedia agar pengujian sisi perangkat memberi tahu bahwa beberapa file harus dikumpulkan.

AndroidTest.xml dapat menentukan kolektor yang akan mencari file di perangkat dan menariknya.

  <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>

Dengan menentukan pola dan kunci ini, kolektor jika melihat kunci akan mencoba menarik dan mencatat file terkait.

Agar kunci ini dibuat, pengujian sisi perangkat (instrumentasi) harus menentukan file yang harus dicatat. Ini dilakukan dengan cara yang sama seperti sisi host (dijelaskan di atas).

  1. Tambahkan collector-device-lib ke APK pengujian Anda di file make:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. Gunakan @rule yang kami sediakan untuk file log:
    @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);
        }
    }

Nama KEY pada contoh di atas adalah nama di mana file akan dilaporkan. Ini adalah nama yang harus Anda cocokkan di FilePullerDeviceMetricCollector agar ditarik secara otomatis. itu harus nama yang unik.

CATATAN: Setelah file ditarik, FilePullerDeviceMetricCollector secara otomatis membersihkannya dari perangkat.

Di mana menemukan metrik?

Itu tergantung dari result_reporter ditentukan dalam konfigurasi XML Anda.