Bir Tradefed testinden alınan rapor metrikleri veya verileri

Bu sayfada, yazarken test sonuçlarının yanı sıra metriklerin nasıl raporlanacağı açıklanmaktadır. Tradefed'te yapılan bir testtir.

Tradefed ardışık düzeni üzerinden günlüğe kaydetmenin avantajı, işlevsel sonuçları alabilirsiniz. Metriklerin günlük kaydı oldukça doğal bir şekilde yapılabilir. Böylece, test yazarlarının daha fazla giriş bilgisi eklemelerini enstrümantasyon.

DeviceTestCase - JUnit3 stili

Testiniz DeviceTestCase'in süresini uzatıyorsa test etmek için bir JUnit3 tarzında bir testte, Bildirmek için herhangi bir test durumundan addTestMetric(String key, String value) bir metriktir. Anahtar benzersiz olduğu sürece birden fazla kez çağrılabilir.

Örnek:

    public static class TestMetricTestCase extends DeviceTestCase {

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

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

Bir dosyanın result_reporters içinde kullanılabilir olmasını sağlamak istiyorsanız addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream) yöntemini çağırın kullanarak bir dosyayı günlüğe kaydedebilir.

Örnek:

    public static class TestLogTestCase extends DeviceTestCase {

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

TestCase - normal JUnit3 testi

Tradefed içindeki metrikleri normal bir JUnit3 TestCase'den raporlamak istiyorsanız yerine, MetricTestCase biçimine dönüştürülmesi gerekir. ek bir yöntemle tam olarak aynı sınıf: addTestMetric(String key, String value)

DeviceJUnit4ClassRunner - JUnit4 stili

JUnit4 stil testiniz DeviceJUnit4ClassRunner, Ayrıca, raporlanacak metrikleri bir test durumu içinde (@Test'in içinde) de günlüğe kaydedebilirsiniz Tradefed tarafından sunulur. Metriklerinizi bildirmek için TestMetrics kurallarını kullanmanız gerekir.

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

Dosyaları bildirmek için TestLogData kuralını kullanırsınız.

Ö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 Test sınıfınızı veya koşucunuzu yazıyorsanız IRemoteTest ve run() yöntemiyle ITestInvocationListener kazanın. Bu dinleyici metrikleri aşağıdaki şekilde günlüğe kaydetmek için kullanılabilir:

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

Ticari metrik toplayıcılar

Tradefed, metrikleri toplamak için özel bir metrics_collector nesnesi sağlar testler ile paralellik gösterir.

Ev sahibi tarafında

BaseDeviceMetricCollector ana makine tarafında metrikleri toplayıp bunları raporlamak için uygulanabilir test çağrısının bir parçası olarak. Bir dizi jenerik koleksiyoncu şu anda farklı kullanım alanlarında kullanılabilecektir, ancak her zaman yeni katkıları da memnuniyetle karşılıyoruz.

Tradefed çağrınızda kullanılacak toplayıcıyı belirtmek için yalnızca 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>

Mevcut toplayıcılardan bazıları: * Sıcaklık Toplayıcı sıcaklığı düzenli olarak toplayan bir sistem kullanır. * AtraceCollector "atrace" kullanarak toplanan verileri her test durumu için ayrı ayrı gösterilir.

Cihaz tarafında

Cihaz tarafı testleri (Araçlar, UIAutomator testleri vb.) çalıştırırken ana makine tarafında eşzamansız olarak toplama yapan bir toplayıcıya sahip olma olmalıdır. Örneğin, eş zamansız olarak alınan bir ekran görüntüsü büyük olasılıkla ve işe yaramaz hale geldi.

Bu kullanım alanlarını karşılamak için toplayıcılarımızın cihaz tarafı sürümü mevcuttur. ve herhangi bir "AndroidJUnitRunner" içinde kullanılabilir enstrümantasyon. BaseMetricListener toplanan metrikleri otomatik olarak raporlamak için kullanılabilir. yalnızca Tradefed raporlama ardışık düzeniyle tamamen uyumlu bir şekilde çalışır.

"AndroidJUnitTest" kullanıyorsanız almak istiyorsanız aşağıdaki komut satırı seçeneğini belirtmeniz yeterlidir: toplayıcınızın testlerinizi çalıştırmasını sağlamak için:

  --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'sının APK'yı statik olarak dahil etmesi gerekir. aşağıdakini yapın:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

Cihaz tarafı toplayıcılara da katkıda bulunmak mümkündür.

Süitler için özellikle dikkat edilmesi gereken noktalar

Bazı modül çalıştıran üst düzey yapılandırmaya sahip CTS gibi süitler yapılandırmalarında olması gerekir, her modülde metrics_collector belirtmeniz gerekmez yapılandırma (AndroidTest.xml). Aslında yasaktır.

Metrik toplamanın her modüle eşit şekilde uygulandığından emin olmak için yalnızca üst düzey yapılandırma (örneğin, cts.xml) belirtebilir metrics_collector olarak ayarlayın. Bu toplayıcılar, kapsamdaki karşılaştırma yapabilirsiniz.

Cihaz günlük dosyalarını bir modülden toplama

Cihaz taraf testinin bazı dosyaları bildirebilmesi için bir kurulum mevcut toplanmalıdır.

AndroidTest.xml, alıp çekin.

  <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ı dosyayı almayı ve günlüğe kaydetmeyi deneyin.

Bu anahtarların oluşturulabilmesi için cihaz tarafında test (araçlar) günlüğe kaydedilmesi gereken dosyayı belirtmelidir. Bu, benzer bir tarafından ana makine taraflı olarak değiştirilmelidir (yukarıda açıklanmıştır).

  1. collector-device-lib öğesini, oluşturma dosyalarında test APK'nıza ekleyin:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. Dosyaları günlüğe kaydetmek için sağladığımız @rule komutunu 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);
        }
    }

Yukarıdaki örnekte KEY adı, dosyanın oluşturulacağı addır. bildiriliyor. Bu, Otomatik olarak alınmasını sağlamak için FilePullerDeviceMetricCollector. olmalı benzersiz bir ad.

NOT: Dosya çekildikten sonra FilePullerDeviceMetricCollector otomatik olarak temizler.

Metrikleri nerede bulabilirim?

Bu, XML yapılandırmanızda belirtilen result_reporter öğesine bağlıdır.