Halaman ini menjelaskan cara melaporkan metrik beserta hasil pengujian saat menulis pengujian di Tradefed.
Manfaat melakukan logging melalui pipeline Tradefed adalah untuk menemukan metrik beserta hasil fungsional Anda. Pembuatan log metrik dapat dilakukan dengan sangat alami dalam pengujian, sehingga memudahkan penulis pengujian untuk menambahkan lebih banyak instrumentasi.
DeviceTestCase - gaya JUnit3
Jika pengujian Anda memperluas DeviceTestCase
dalam jenis pengujian gaya JUnit3, Anda dapat memanggil metode
addTestMetric(String key, String value)
dari dalam kasus pengujian apa pun untuk melaporkan
metrik. Ini dapat dipanggil beberapa kali selama kuncinya unik.
Contoh:
public static class TestMetricTestCase extends DeviceTestCase {
public void testPass() {
addTestMetric("key1", "metric1");
}
public void testPass2() {
addTestMetric("key2", "metric2");
}
}
Jika ingin mencatat file agar tersedia di result_reporters
, Anda dapat
memanggil metode addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream)
dari dalam kasus pengujian untuk melaporkan file yang akan dicatat ke dalam log.
Contoh:
public static class TestLogTestCase extends DeviceTestCase {
public void testPass() {
try (InputStreamSource source = getDevice().getScreenshot()) {
addTestLog("screenshot", LogDataType.PNG, source);
}
}
}
TestCase - pengujian JUnit3 reguler
Jika Anda ingin melaporkan metrik di dalam Tradefed dari class TestCase JUnit3 reguler,
metrik tersebut harus dikonversi ke MetricTestCase
, yang merupakan
class yang sama persis dengan metode tambahan: addTestMetric(String key, String value)
DeviceJUnit4ClassRunner - gaya JUnit4
Jika pengujian gaya JUnit4 Anda berjalan dengan DeviceJUnit4ClassRunner, Anda juga dapat mencatat metrik dalam kasus pengujian (di dalam @Test) untuk dilaporkan oleh Tradefed. Anda harus menggunakan aturan TestMetrics
untuk melaporkan metrik.
Contoh:
@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");
}
}
Untuk melaporkan file, Anda akan menggunakan aturan TestLogData
untuk melaporkannya.
Contoh:
@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 - Uji Tradefed murni
Jika menulis class atau runner Pengujian Tradefed Anda sendiri, Anda akan menerapkan
IRemoteTest
dan mendapatkan ITestInvocationListener
melalui metode run()
. Pemroses ini
dapat digunakan untuk mencatat metrik sebagai berikut:
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
Kolektor metrik yang diperdagangkan
Tradefed menyediakan objek metrics_collector
khusus untuk mengumpulkan metrik secara
paralel dengan pengujian.
Di sisi host
BaseDeviceMetricCollector dapat diterapkan untuk mengumpulkan metrik apa pun dari sisi host dan melaporkannya sebagai bagian dari pemanggilan pengujian. Sejumlah kolektor generik sudah tersedia untuk berbagai kasus penggunaan, tetapi kami selalu menerima kontribusi baru.
Untuk menentukan kolektor yang akan digunakan dalam pemanggilan Tradefed, Anda hanya perlu menambahkan objek ke konfigurasi XML Tradefed:
Contoh:
<metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
<option name="categories" value="freq"/>
</metrics_collector>
Beberapa kolektor yang ada saat ini: * TemperatureCollector yang mengumpulkan suhu secara berkala selama pengujian berjalan. * AtraceCollector yang mengumpulkan menggunakan 'atrace' untuk setiap kasus pengujian.
Di sisi perangkat
Saat menjalankan pengujian sisi perangkat (Instrumentasi, pengujian UIAutomator, dll.), memiliki kolektor pada pengumpulan sisi host secara asinkron mungkin tidak ideal. Misalnya, screenshot yang diambil secara asinkron kemungkinan besar akan melewatkan layar yang diinginkan dan tidak berguna.
Untuk memenuhi kasus penggunaan ini, versi sisi perangkat kolektor kami tersedia dan dapat digunakan di instrumentasi 'AndroidJUnitRunner' apa pun. BaseMetricListener dapat diterapkan untuk melaporkan secara otomatis metrik yang dikumpulkan dengan cara yang sepenuhnya kompatibel dengan pipeline pelaporan Tradefed.
Jika menggunakan runner 'AndroidJUnitTest' dari Tradefed, Anda cukup menentukan opsi command line berikut agar kolektor berjalan dengan pengujian:
--device-listeners android.device.collectors.ScreenshotListener
PERHATIAN: Agar class kolektor dapat di-resolve saat runtime, APK instrumentasi Anda kemungkinan besar harus menyertakannya secara statis dengan menambahkan hal berikut ke makefile Anda:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
Kontribusi untuk kolektor sisi perangkat juga diterima.
Pertimbangan khusus untuk suite
Untuk suite seperti CTS yang memiliki konfigurasi tingkat atas yang menjalankan beberapa konfigurasi
modul, Anda tidak perlu menentukan metrics_collector
di setiap konfigurasi
modul (AndroidTest.xml
). Hal ini sebenarnya dilarang.
Untuk memastikan pengumpulan metrik diterapkan secara merata ke setiap modul,
hanya konfigurasi tingkat teratas (misalnya, cts.xml
) yang dapat menentukan
metrics_collector
seperti yang dijelaskan di atas. Kolektor ini akan diterapkan dan dijalankan
pada setiap modul suite.
Mengumpulkan file log perangkat dari modul
Penyiapan tersedia agar pengujian sisi perangkat dapat memberi tahu bahwa beberapa file harus dikumpulkan.
AndroidTest.xml
dapat menentukan kolektor yang akan mencari file di
perangkat dan menariknya.
<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>
Dengan menentukan pola dan kunci ini, kolektor jika melihat kunci tersebut akan mencoba mengambil dan mencatat file terkait ke dalam log.
Agar kunci ini dapat dibuat, pengujian sisi perangkat (instrumentasi) harus menentukan file yang harus dicatat ke dalam log. Hal ini dilakukan dengan cara yang serupa seperti sisi host (dijelaskan di atas).
- Tambahkan
collector-device-lib
ke APK pengujian Anda di file make:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
- Gunakan @rule yang kami berikan untuk membuat log file:
@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);
}
}
Nama KEY
dalam contoh di atas adalah nama tempat file akan dilaporkan. Ini adalah nama yang harus Anda cocokkan di
FilePullerDeviceMetricCollector
agar dapat diambil secara otomatis. Nama ini harus
unik.
CATATAN: Setelah file diambil, FilePullerDeviceMetricCollector
akan otomatis
membersihkannya dari perangkat.
Di mana saya dapat menemukan metrik tersebut?
Hal ini bergantung pada result_reporter
yang ditentukan dalam konfigurasi XML Anda.