Báo cáo chỉ số hoặc dữ liệu từ thử nghiệm trên Tradefeed

Trang này mô tả cách báo cáo chỉ số cùng với kết quả kiểm thử khi viết một thử nghiệm trong Tradefeed.

Lợi ích của việc đăng nhập thông qua quy trình Tradefeed là tìm thấy các chỉ số của bạn cùng với kết quả chức năng. Việc ghi nhật ký các chỉ số có thể được thực hiện rất tự nhiên trong các bài kiểm thử, giúp người viết kiểm thử dễ dàng thêm khả năng đo lường.

DeviceTestCase – Kiểu JUnit3

Nếu kiểm thử của bạn mở rộng DeviceTestCase trong loại kiểm thử kiểu JUnit3, bạn có thể gọi phương thức addTestMetric(String key, String value) từ bên trong bất kỳ trường hợp kiểm thử nào để báo cáo một chỉ số. Lệnh này có thể được gọi nhiều lần, miễn là khoá là duy nhất.

Ví dụ:

    public static class TestMetricTestCase extends DeviceTestCase {

        public void testPass() {
            addTestMetric("key1", "metric1");
        }

        public void testPass2() {
            addTestMetric("key2", "metric2");
        }
    }

Nếu muốn ghi nhật ký một tệp có trong result_reporters, bạn có thể gọi phương thức addTestLog(String dataName, LogDataType dataType, InputStreamSource dataStream) từ bên trong bất kỳ trường hợp kiểm thử nào để báo cáo tệp cần ghi nhật ký.

Ví dụ:

    public static class TestLogTestCase extends DeviceTestCase {

        public void testPass() {
            try (InputStreamSource source = getDevice().getScreenshot()) {
                addTestLog("screenshot", LogDataType.PNG, source);
            }
        }
    }

TestCase – kiểm thử JUnit3 thông thường

Nếu bạn muốn báo cáo các chỉ số bên trong Tradefeed từ một TestCase JUnit3 thông thường lớp, thì cần phải chuyển đổi lớp đó thành MetricTestCase. cùng một lớp với một phương thức bổ sung: addTestMetric(String key, String value)

DeviceJUnit4ClassRunner – Kiểu JUnit4

Nếu thử nghiệm kiểu JUnit4 của bạn đang chạy với DeviceJUnit4ClassRunner, thì bạn cũng có thể ghi lại các chỉ số trong một trường hợp kiểm thử (bên trong @Test) để báo cáo của Tradefeed. Bạn sẽ cần phải sử dụng TestMetrics quy tắc để báo cáo các chỉ số của mình.

Ví dụ:

    @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");
        }
    }

Để báo cáo tệp, bạn sẽ sử dụng quy tắc TestLogData để báo cáo tệp đó.

Ví dụ:

    @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 - thử nghiệm Tradefeed đơn thuần

Nếu bạn đang viết lớp hoặc trình chạy Thử nghiệm Tradefeed của riêng mình, bạn sẽ ứng dụng IRemoteTest và nhận ITestInvocationListener thông qua phương thức run(). Trình nghe này có thể được sử dụng để ghi nhật ký các chỉ số như sau:

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

Trình thu thập chỉ số được trao đổi

Tradefeed cung cấp một đối tượng metrics_collector chuyên biệt để thu thập các chỉ số trong song song của các bài kiểm thử.

Về phía máy chủ

BaseDeviceMetricCollectionor có thể được triển khai để thu thập mọi chỉ số từ phía máy chủ và báo cáo các chỉ số đó như một phần của lệnh gọi kiểm thử. Đã có một số trình thu thập chung có sẵn cho các trường hợp sử dụng khác nhau nhưng chúng tôi luôn hoan nghênh các đóng góp mới.

Để chỉ định trình thu thập sẽ được sử dụng trong lệnh gọi Thương mại, bạn chỉ cần thêm đối tượng vào cấu hình XML Tradefeed của bạn:

Ví dụ:

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

Một số trình thu thập hiện đã có: * Thiết bị thu nhiệt độ thu thập nhiệt độ theo định kỳ trong quá trình chạy thử nghiệm. * AtraceThu thập thu thập bằng cách sử dụng "dấu vết" cho từng trường hợp kiểm thử.

Về phía thiết bị

Khi chạy kiểm thử phía thiết bị (Công cụ đo lường, kiểm thử UIAutomator, v.v.), việc đặt trình thu thập ở phía máy chủ thu thập một cách không đồng bộ có thể không lý tưởng. Ví dụ: ảnh chụp màn hình được chụp không đồng bộ rất có thể sẽ bỏ lỡ màn hình mong muốn và trở nên vô ích.

Để đáp ứng những trường hợp sử dụng này, chúng tôi đã tạo một phiên bản phía thiết bị của bộ sưu tập và có thể dùng trong bất kỳ "AndroidJUnitRunner" nào khả năng đo lường. BaseMetricListener có thể được triển khai để tự động báo cáo các chỉ số được thu thập theo cách hoàn toàn tương thích với quy trình báo cáo Tradefeed.

Nếu bạn đang sử dụng thuộc tính "AndroidJUnitTest" trình chạy của mình trên Tradefeed, bạn chỉ cần chỉ định tuỳ chọn dòng lệnh sau để trình thu thập chạy các bài kiểm thử của bạn:

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

THẬN TRỌNG: Để các lớp trình thu thập được giải quyết trong thời gian chạy, rất có thể APK khả năng đo lường sẽ cần đưa chúng theo cách tĩnh bằng cách thêm vào tệp makefile của bạn như sau:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

Chúng tôi cũng hoan nghênh đóng góp cho người sưu tập phía thiết bị.

Cân nhắc đặc biệt đối với bộ ứng dụng

Đối với các bộ ứng dụng như CTS có cấu hình cấp cao nhất chạy một số mô-đun cấu hình, không cần chỉ định metrics_collector trong mỗi mô-đun cấu hình (AndroidTest.xml). Thực sự thì điều này bị cấm.

Để đảm bảo việc thu thập chỉ số được áp dụng đồng đều cho mỗi mô-đun, chỉ cấu hình cấp cao nhất (ví dụ: cts.xml) mới có thể chỉ định metrics_collector như đã giải thích ở trên. Các trình thu thập này sẽ được áp dụng và chạy dựa vào từng mô-đun của bộ công cụ.

Thu thập tệp nhật ký của thiết bị qua một mô-đun

Có một chế độ thiết lập để kiểm thử phía thiết bị nhằm thông báo rằng một số tệp cần được thu thập.

AndroidTest.xml có thể chỉ định một trình thu thập sẽ tìm tệp trên thiết bị và kéo chúng.

  <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>

Bằng cách chỉ định các mẫu và khoá này, trình thu thập nếu thấy khoá sẽ cố gắng lấy và ghi nhật ký tệp được liên kết.

Để tạo các khoá này, hãy kiểm thử phía thiết bị (đo lường) phải chỉ định tệp cần được ghi nhật ký. Việc này được thực hiện theo cách tương tự như phía máy chủ (mô tả ở trên).

  1. Thêm collector-device-lib vào APK kiểm thử của bạn trong các tệp make:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. Dùng @quy tắc mà chúng tôi cung cấp cho tệp nhật ký:
    @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);
        }
    }

Tên KEY trong ví dụ trên là tên mà tệp sẽ được đặt đã báo cáo. Đây là tên mà bạn phải khớp trong FilePullerDeviceMetricCollector để được kéo tự động. nó phải là một tên duy nhất.

LƯU Ý: Sau khi kéo tệp, FilePullerDeviceMetricCollector sẽ tự động xoá sạch dữ liệu đó khỏi thiết bị.

Tôi có thể xem các chỉ số ở đâu?

Điều này phụ thuộc vào result_reporter được chỉ định trong cấu hình XML của bạn.