Tradefed testinden alınan metrikler veya veriler nasıl raporlanır?

Bu sayfada, Tradefed'de bir test yazarken test sonuçlarıyla birlikte metriklerin nasıl raporlanacağı açıklanmaktadır.

Tradefed ardışık düzeni üzerinden oturum açmanın yararı, işlevsel sonuçlarınızın yanında metriklerinizi bulmaktır. Metriklerin günlüğe kaydedilmesi testler içinde çok doğal bir şekilde yapılabilir, bu da test yazarlarının daha fazla enstrümantasyon eklemesini kolaylaştırır.

DeviceTestCase - JUnit3 stili

Test uzanıyorsa DeviceTestCase testinin bir JUnit3 tarzı ayni, sen yöntem çağırabilir addTestMetric(String key, String value) herhangi test durumları bir metrik rapor etmek içinden. Anahtar benzersiz olduğu sürece bu, birden çok kez çağrılabilir.

Örnek:

    public static class TestMetricTestCase extends DeviceTestCase {

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

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

Eğer mevcut olması için bir günlük dosyası istiyorsanız result_reporters , sen yöntem çağırabilir addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream) oturum açmak için bir dosyayı bildirmek için herhangi bir test durumlarda içinden.

Örnek:

    public static class TestLogTestCase extends DeviceTestCase {

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

TestCase - düzenli JUnit3 testi

Eğer düzenli JUnit3 dizge sınıfından Tradefed içindeki ölçümlerini bildirmek istiyorsanız, bu dönüştürülebilir gerekecektir MetricTestCase yerine fazladan bir yöntemle aynı sınıf olan: addTestMetric(String key, String value)

DeviceJUnit4ClassRunner - JUnit4 stili

Senin JUnit4 tarzı testi ile çalışıyorsa DeviceJUnit4ClassRunner , o zaman da Tradefed tarafından rapor edilecek (@Test içinde) bir test durumu ölçümler olan giriş yapabilirsiniz. Sen kullanmanız gerekecektir TestMetrics Metriklerinizi bildirmek için kurallar.

Örnek:

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

Raporda dosyaları için, kullanacağınız TestLogData haber vermesi kuralı.

Örnek:

    @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 - saf Tradefed Testi

Kendi Tradefed Testi sınıfı veya koşucu yazıyorsanız sen implemement olacak IRemoteTest ve bir olsun ITestInvocationListener yoluyla run() yöntemiyle. Bu dinleyici, metrikleri aşağıdaki gibi günlüğe kaydetmek için kullanılabilir:

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

Tradefed metrik toplayıcıları

Tradefed adanmış sağlar metrics_collector testlerinin paralel toplama ölçümlerine nesneyi.

Ev sahibi tarafında

BaseDeviceMetricCollector konak tarafında herhangi ölçümler toplamak ve test çağırma parçası olarak bildirmek için uygulanabilir. Farklı kullanım durumları için bir dizi genel koleksiyoncu zaten mevcuttur, ancak her zaman yeni katkıları memnuniyetle karşılarız.

Tradefed çağrınızda kullanılacak toplayıcıyı belirtmek için, nesneyi Tradefed XML yapılandırmanıza eklemeniz yeterlidir:

Örnek:

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

Bazı anda mevcut toplayıcıları: * TemperatureCollector test çalışması sırasında periyodik olarak sıcaklık toplar. * AtraceCollector Her test için 'atrace' kullanarak topladığı.

Cihaz tarafında

Cihaz tarafı testleri (Instrumentations, UIAutomator testleri, vb.) çalıştırırken, ana bilgisayar tarafında asenkron olarak toplama yapan bir toplayıcıya sahip olmak ideal olmayabilir. Örneğin, eşzamansız olarak alınan bir ekran görüntüsü, büyük olasılıkla istenen ekranı kaçıracak ve işe yaramaz.

Bu kullanım durumlarını karşılamak için, koleksiyoncularımızın cihaz tarafı sürümü mevcuttur ve herhangi bir 'AndroidJUnitRunner' enstrümantasyonunda kullanılabilir. BaseMetricListener otomatik Tradefed raporlama sistemine tam uyumlu bir şekilde toplanır ölçümlerini rapor etmek amacıyla uygulanabilir.

Eğer 'kullanıyorsanız AndroidJUnitTest Tradefed gelen' koşucu, sadece testleri ile çalışan kollektörü olması aşağıdaki komut satırı seçeneği belirtebilirsiniz:

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

DİKKAT: Toplayıcı sınıflarının çalışma zamanında çözümlenmesi için, enstrümantasyon APK'nızın büyük olasılıkla makefile'nize aşağıdakileri ekleyerek bunları statik olarak dahil etmesi gerekir:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

Cihaz tarafı toplayıcılara katkılar da memnuniyetle karşılanmaktadır.

Süitler için özel değerlendirme

Bazı modülü yapılandırmalarını çalışan bir üst düzey yapılandırmasına sahip CTS gibi suit için belirtmek için gerek yoktur metrics_collector her modül konfigürasyonu (içinde AndroidTest.xml ). Aslında yasaktır.

Metrik toplama (örneğin, her modül için aynı ölçüde yalnızca üst seviye konfigürasyonunu uygulanır sağlamak cts.xml ) belirtebilir metrics_collector yukarıda açıklandığı gibi. Bu toplayıcılar, paketin her modülüne karşı uygulanacak ve çalıştırılacaktır.

Bir modülden cihaz günlük dosyaları nasıl toplanır?

Cihaz tarafı testinin bazı dosyaların toplanması gerektiğini bildirmesi için bir kurulum mevcuttur.

AndroidTest.xml cihazda dosyasını arayın ve onları çekecek bir kolektör belirtebilirsiniz.

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

Bu kalıpları ve anahtarı belirterek, toplayıcı anahtarı görürse ilgili dosyayı çekip kaydetmeye çalışacaktır.

Bu anahtarların oluşturulabilmesi için cihaz tarafında bir test (enstrümantasyon) loglanması gereken dosyayı belirtmelidir. Ana bilgisayar tarafında olduğu gibi yapılır (yukarıda açıklanmıştır).

  1. Ekle collector-device-lib yapmak dosyalarında test APK'nıza:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. Dosyaları günlüğe kaydetmek için sağladığımız @kuralı kullanın:
    @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 örnekte adı Yukarıdaki dosya rapor edilecektir altında adıdır. Bu uyumlu olmalıdır adıdır FilePullerDeviceMetricCollector otomatik çekip almak için. benzersiz bir ad olmalıdır.

NOT: Dosya çekilir sonra, FilePullerDeviceMetricCollector otomatik cihazdan temizler.

Metrikleri nerede bulabilirim?

Bu bağlıdır result_reporter XML yapılandırmasında belirtilmiş.