Tradefed testinden alınan ölçümleri veya verileri raporlayın

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

Tradefed boru hattı aracılığıyla oturum açmanın yararı, işlevsel sonuçlarınızın yanı sıra ölçümlerinizi de bulmaktır. Ölçümlerin günlüğe kaydedilmesi testler içerisinde çok doğal bir şekilde yapılabilir; bu da test yazarlarının daha fazla araç eklemesini kolaylaştırır.

DeviceTestCase - JUnit3 stili

Testiniz DeviceTestCase'i JUnit3 tarzı bir testte genişletiyorsa, bir ölçüm bildirmek için herhangi bir test senaryosunun içinden addTestMetric(String key, String value) yöntemini çağırabilirsiniz. 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");
        }
    }

Bir dosyayı result_reporters kullanılabilir olacak şekilde günlüğe kaydetmek istiyorsanız, günlüğe kaydedilecek bir dosyayı bildirmek için herhangi bir test senaryosunun içinden addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream) yöntemini çağırabilirsiniz.

Ö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

Tradefed içindeki metrikleri normal bir JUnit3 TestCase sınıfından raporlamak istiyorsanız, bunun yerine ekstra bir yöntemle tamamen aynı sınıf olan bir MetricTestCase dönüştürülmesi gerekir: addTestMetric(String key, String value)

DeviceJUnit4ClassRunner - JUnit4 stili

JUnit4 tarzı testiniz DeviceJUnit4ClassRunner ile çalışıyorsa, Tradefed tarafından raporlanacak bir test senaryosu içindeki (@Test içinde) metrikleri de günlüğe kaydedebilirsiniz. Metriklerinizi raporlamak için TestMetrics kurallarını kullanmanız gerekecektir.

Ö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ı raporlamak için TestLogData kuralını kullanacaksı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'i uygulayacak ve run() yöntemi aracılığıyla bir ITestInvocationListener elde edeceksiniz. 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);

Ticaretle beslenen ölçüm toplayıcıları

Tradefed, testlere paralel olarak metrikleri toplamak için özel bir metrics_collector nesnesi sağlar.

Ev sahibi tarafta

BaseDeviceMetricCollector, ana bilgisayar tarafından herhangi bir ölçümü toplamak ve bunları test çağrısının bir parçası olarak raporlamak için uygulanabilir. Farklı kullanım durumları için bir dizi genel toplayıcı halihazırda mevcuttur, ancak yeni katkıları her zaman 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>

Şu anda mevcut olan bazı toplayıcılar: * Test çalışması sırasında sıcaklığı periyodik olarak toplayan TemperatureCollector . * Her test senaryosu için 'atrace' kullanarak toplayan AtraceCollector .

Cihaz tarafında

Cihaz tarafı testleri (Aletler, UIAutomator testleri vb.) çalıştırırken, ana bilgisayar tarafında eşzamansız olarak toplayan 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 hale gelecektir.

Bu kullanım durumlarını karşılamak için toplayıcılarımızın cihaz tarafı bir sürümü mevcuttur ve herhangi bir 'AndroidJUnitRunner' enstrümantasyonunda kullanılabilir. BaseMetricListener, toplanan ölçümleri Tradefed raporlama hattıyla tamamen uyumlu bir şekilde otomatik olarak raporlamak için uygulanabilir.

Tradefed'in ' AndroidJUnitTest ' çalıştırıcısını kullanıyorsanız, toplayıcınızın testlerinizle birlikte çalışmasını sağlamak için aşağıdaki komut satırı seçeneğini belirtmeniz yeterlidir:

  --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 bunları makefile'ınıza aşağıdakileri ekleyerek statik olarak dahil etmesi gerekecektir:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

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

Süitlere özel önem

Bazı modül yapılandırmalarını çalıştıran üst düzey yapılandırmaya sahip CTS gibi paketler için, her modül yapılandırmasında ( AndroidTest.xml ) metrics_collector belirtmeye gerek yoktur. Aslında yasaktır.

Metrik koleksiyonunun her modüle eşit şekilde uygulandığından emin olmak için, yukarıda açıklandığı gibi yalnızca üst düzey yapılandırma (örneğin, cts.xml ) metrics_collector belirtebilir. Bu toplayıcılar paketin her modülüne uygulanacak ve çalıştırılacaktır.

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

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

AndroidTest.xml cihazdaki dosyayı arayacak ve bunları çekecek bir toplayıcı belirtebilir.

  <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ı alıp günlüğe kaydetmeye çalışacaktır.

Bu anahtarların oluşturulabilmesi için, günlüğe kaydedilmesi gereken dosyayı cihaz tarafı testi (araçlar) belirtmelidir. Ana bilgisayar tarafındakine benzer şekilde yapılır (yukarıda açıklanmıştır).

  1. collector-device-lib make dosyalarındaki 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'u 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 örnekteki KEY adı, dosyanın raporlanacağı addır. Bu, otomatik olarak çekilmesini sağlamak için FilePullerDeviceMetricCollector eşleştirmeniz gereken addır. benzersiz bir isim olmalıdır.

NOT: Dosya çekildikten sonra FilePullerDeviceMetricCollector dosyayı cihazdan otomatik olarak temizler.

Metrikleri nerede bulabilirim?

XML yapılandırmanızda belirtilen result_reporter bağlıdır.