本頁面說明如何在 Tradefed 中編寫測試時,一併回報指標和測試結果。
透過 Tradefed 管道記錄資料的好處,是可以同時查看指標和功能性結果。指標記錄其實非常自然 方便測試撰寫者加入 這些指令。
DeviceTestCase - JUnit3 樣式
如果測試擴充 DeviceTestCase
在 JUnit3 樣式的測試中,您可以呼叫該方法
所有測試案例內的addTestMetric(String key, String value)
,才能回報
指標只要鍵不重複,即可多次呼叫此方法。
例子:
public static class TestMetricTestCase extends DeviceTestCase {
public void testPass() {
addTestMetric("key1", "metric1");
}
public void testPass2() {
addTestMetric("key2", "metric2");
}
}
如果您想記錄可在 result_reporters
中使用的檔案,可以從任何測試案例中呼叫 addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream)
方法,將檔案回報至記錄。
例子:
public static class TestLogTestCase extends DeviceTestCase {
public void testPass() {
try (InputStreamSource source = getDevice().getScreenshot()) {
addTestLog("screenshot", LogDataType.PNG, source);
}
}
}
TestCase - 一般 JUnit3 測試
如果您想透過一般 JUnit3 TestCase 類別,從 Tradefed 回報指標,則需要將該類別轉換為 MetricTestCase
,這是一個具有額外方法的完全相同類別:addTestMetric(String key, String value)
DeviceJUnit4ClassRunner - JUnit4 樣式
如果 JUnit4 樣式測試是使用 DeviceJUnit4ClassRunner 執行,您也可以在測試案例 (位於 @Test 內) 中記錄指標,以便由 Tradefed 回報。您必須使用TestMetrics
規則回報指標。
例子:
@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");
}
}
如要回報檔案,您必須使用 TestLogData
規則。
例子:
@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 - 純粹的 Tradefed 測試
如果您要編寫自己的 Tradefed 測試類別或執行程式,請實作 IRemoteTest,並透過 run()
方法取得 ITestInvocationListener
。這個事件監聽器
可用於記錄指標,如下所示:
listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);
Tradefed 指標收集器
交易提供專屬的 metrics_collector
物件,可用來收集指標
同時執行多項測試
主機端
您可以實作 BaseDeviceMetricCollector,收集主機端的任何指標,並將這些指標做為測試叫用作業的一部分回報。我們已提供多個通用收集器供不同用途使用,但我們也歡迎新的貢獻。
如要指定在交易叫用中使用的收集器,您必須 只需要將物件新增至交易 XML 設定即可:
例子:
<metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
<option name="categories" value="freq"/>
</metrics_collector>
目前的收集器: * TemperatureCollector:在測試執行期間定期收集溫度。* AtraceCollector,可針對每個測試案例使用「atrace」進行收集。
裝置端
執行裝置端測試 (檢測設備、UIAutomator 測試等) 時,在主機端以非同步方式收集資料可能不是理想做法。舉例來說,以非同步方式擷取的螢幕截圖很可能會錯過所需畫面,因此毫無用處。
為了滿足這些用途,我們提供裝置端版本的收集器,可用於任何「AndroidJUnitRunner」檢測工具。BaseMetricListener 您就能導入並自動記錄 系統如何與 Tradefed 報表管道完全相容
如果使用「AndroidJUnitTest」 只需指定下列指令列選項即可 使用收集器進行測試:
--device-listeners android.device.collectors.ScreenshotListener
注意:為了在執行階段解析收集器類別,您的 一般來說,檢測 APK 必須以靜態方式加入 APK,方法是在 新增到 makefile,如下所示:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
歡迎為裝置端收集器做出貢獻。
套房的特別考量
對於像 CTS 這類套件,如果套件有執行某些模組設定的頂層設定,則不需要在每個模組設定 (AndroidTest.xml
) 中指定 metrics_collector
,實際上這項操作是禁止的。
為確保指標收集作業能平均套用至每個模組,只有頂層設定 (例如 cts.xml
) 可以指定 metrics_collector
,如上文所述。系統會套用這些收集器
套件中的每個模組
收集模組中的裝置記錄檔
您可以設定裝置端測試,通知系統應收集某些檔案。
AndroidTest.xml
可以指定收集器,用來尋找
然後拉出圖片
<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>
指定這些模式和鍵後,收集器如果偵測到鍵 來提取及記錄關聯檔案。
為了產生這些金鑰,裝置端測試 (檢測) 且應指定應記錄的檔案。這項作業的執行方式與主機端 (如上所述) 類似。
- 在 make 檔案中將
collector-device-lib
新增至測試 APK:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
- 使用我們提供的 @rule 記錄檔案:
@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);
}
}
上述範例中的 KEY
名稱是用於回報檔案的名稱。這是您在 FilePullerDeviceMetricCollector
中應比對的名稱,以便系統自動擷取。此名稱不得重複。
注意:檔案提取完畢後,會自動 FilePullerDeviceMetricCollector
內容就會從裝置中清除
我可以在哪裡查看指標?
這取決於 XML 設定檔中指定的 result_reporter
。