回報交易測試中的指標或資料

本頁面說明如何在寫入時回報指標和測試結果 進行 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 內部) 中記錄要回報的指標 所謂交易您必須使用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 - 純交易測試

如果您要自行撰寫交易測試課程或跑者, IRemoteTest 並透過 run() 方法取得 ITestInvocationListener。這個事件監聽器 可用於記錄指標,如下所示:

    listener.testLog(String dataName, LogDataType type of data, InputStreamSource data);

交易指標收集器

交易提供用於收集指標的專屬 metrics_collector 物件 同時執行多項測試

主機端

BaseDeviceMetricCollector ,您就可以導入並回報主機端指標 做為測試叫用的一部分目前已經有不少通用收集程式 不同用途,但我們始終歡迎新貢獻。

如要指定在交易叫用中使用的收集器,您必須 只需要將物件新增至交易 XML 設定即可:

例子:

  <metrics_collector class="com.android.tradefed.device.metric.AtraceCollector">
      <option name="categories" value="freq"/>
  </metrics_collector>

一些現有的收集器: * TemperatureCollector (溫度收集器) 此模型會在測試執行期間定期收集溫度資訊 * AtraceCollector 「atrace」資料。

裝置端

執行裝置端測試 (檢測設備、UIAutomator 測試等) 時, 以非同步方式在主機端收集資料時 理想上舉例來說,以非同步方式擷取的螢幕截圖很有可能會遺漏 讓裝置使用起來更順暢

為滿足這些使用情境,Google 收集器提供了裝置端版本 並可在任何「AndroidJUnitRunner」中使用這些指令。 BaseMetricListener 您就能導入並自動記錄 系統如何與 Tradefed 報表管道完全相容

如果使用「AndroidJUnitTest」 只需指定下列指令列選項即可 使用收集器進行測試:

  --device-listeners android.device.collectors.ScreenshotListener

注意:為了在執行階段解析收集器類別,您的 一般來說,檢測 APK 必須以靜態方式加入 APK,方法是在 新增到 makefile,如下所示:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

我們也歡迎向裝置端收集器做出貢獻。

套房的特別考量

適用於 CTS 等套件,且頂層設定正在執行某些模組 不需要在每個模組中指定 metrics_collector 設定 (AndroidTest.xml)。實際上已禁止。

為了確保每個模組都平均套用指標集合 只有頂層設定 (例如 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>

指定這些模式和鍵後,收集器如果偵測到鍵 來提取及記錄關聯檔案。

為了產生這些金鑰,裝置端測試 (檢測) 且應指定應記錄的檔案。這個做法 與主機端相容 (如上所述)。

  1. 在 Make 檔案中將 collector-device-lib 新增至測試 APK:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. 使用我們提供的 @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