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).
-
collector-device-lib
make dosyalarındaki test APK'nıza ekleyin:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
- 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.