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ük kaydetmenin avantajı, işlevsel sonuçlarınızın yanı sıra metriklerinizi de bulabilmenizdir. 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 bu işlev 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");
}
}
result_reporters
'te kullanılacak bir dosyayı günlük kaydına almak istiyorsanız günlük kaydına alınacak dosyayı bildirmek için herhangi bir testin 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 - normal JUnit3 testi
Tradefed'deki metrikleri normal bir JUnit3 TestCase sınıfından bildirmek istiyorsanız bu sınıfın, ek bir yöntem içeren aynı sınıf olan MetricTestCase
sınıfına dönüştürülmesi gerekir: addTestMetric(String key, String value)
DeviceJUnit4ClassRunner - JUnit4 stili
JUnit4 stilindeki testiniz DeviceJUnit4ClassRunner ile çalışıyorsa Tradefed tarafından raporlanacak metrikleri bir test durumunda da (@Test içinde) günlüğe kaydedebilirsiniz. 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 gibi günlük 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.
Düzenleyen tarafında
BaseDeviceMetricCollector, ana makine tarafındaki tüm metrikleri toplamak ve test çağrısının bir parçası olarak bildirmek için uygulanabilir. 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>
Şu anda mevcut olan bazı toplayıcılar: * Test çalışması sırasında sıcaklığı düzenli olarak toplayan TemperatureCollector. * AtraceCollector "atrace" kullanarak toplanan verileri her test durumu için ayrı ayrı gösterilir.
Cihaz tarafında
Cihaz tarafında testler (Enstrümasyonlar, UIAutomator testleri vb.) çalıştırırken ana tarafta eşzamansız olarak veri toplayan bir toplayıcı kullanmak ideal olmayabilir. Ö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ında bir sürümü mevcuttur ve herhangi bir "AndroidJUnitRunner" enstrümantasyonunda kullanılabilir. BaseMetricListener, toplanan metrikleri Tradefed raporlama ardışık düzeniyle tamamen uyumlu bir şekilde otomatik olarak raporlamak için uygulanabilir.
Tradefed'deki "AndroidJUnitTest" çalıştırıcısını kullanıyorsanız toplayıcınızı testlerinizle birlikte çalıştırmak 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'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 özel hususlar
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 toplama işleminin her modüle eşit şekilde uygulanmasını sağlamak için yalnızca üst düzey yapılandırma (örneğin, cts.xml
) yukarıda açıklandığı gibi metrics_collector
değerini belirtebilir. Bu toplayıcılar, kapsamdaki
karşılaştırma yapabilirsiniz.
Cihaz günlük dosyalarını bir modülden toplama
Cihaz tarafında yapılan bir testin bazı dosyaların toplanacağını bildirmesi için bir kurulum mevcuttur.
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 bir test (enstrümantasyon) tarafından günlük kaydının tutulacağı dosya belirtilmelidir. Bu işlem, ana makine tarafıyla (yukarıda açıklanmıştır) benzer şekilde yapılır.
- make dosyalarında test APK'nıza
collector-device-lib
ekleyin:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
- Dosyaları günlüğe kaydetmek için sağladığımız @rule kuralını 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
değerine bağlıdır.