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 kiểm thử trong Tradefeed.

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

DeviceTestCase – Kiểu JUnit3

Nếu kiểm thử của bạn mở rộng DeviceTestCase trong một 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ố. Bạn có thể gọi hàm này 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ó sẵn 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 một 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 Tradefed từ một lớp TestCase JUnit3 thông thường, thì bạn cần chuyển đổi lớp đó thành MetricTestCase. Đây chính là lớp giống hệt với một phương thức bổ sung: addTestMetric(String key, String value)

DeviceJUnit4ClassRunner – Kiểu JUnit4

Nếu kiểm thử kiểu JUnit4 đang chạy bằng DeviceJUnit4ClassRunner, thì bạn cũng có thể ghi nhật ký các chỉ số trong một trường hợp kiểm thử (bên trong @Test) để Tradefed báo cáo. Bạn cần sử dụng quy tắc TestMetrics để 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 đang viết lớp hoặc trình chạy Kiểm thử Tradefed của riêng mình, bạn sẽ triển khai IRemoteTest và nhận được ITestInvocationListener thông qua phương thức run(). Bạn có thể sử dụng trình nghe này để ghi nhật ký các chỉ số như sau:

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

Bộ thu thập chỉ số Tradefed

Tradefed cung cấp một đối tượng metrics_collector chuyên dụng để thu thập các chỉ số song song với các bài kiểm thử.

Về phía máy chủ

Bạn có thể triển khai BaseDeviceMetricCollector để thu thập mọi chỉ số từ phía máy chủ lưu trữ và báo cáo các chỉ số đó trong lệnh gọi kiểm thử. Một số trình thu thập chung đã được cung cấp 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 dữ liệu sẽ được sử dụng trong lệnh gọi Tradefed, bạn chỉ cần thêm đối tượng vào cấu hình XML Tradefed:

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ó: * TemperatureCollector thu thập nhiệt độ định kỳ trong quá trình chạy kiểm thử. * AtraceCollector thu thập bằng cách sử dụng "atrace" cho mỗi trường hợp kiểm thử.

Ở phía thiết bị

Khi chạy các chương trình kiểm thử phía thiết bị (Công cụ đo lường, kiểm thử UIAutomator, v.v.), việc có một trình thu thập dữ liệu phía máy chủ thu thập không đồng bộ có thể không phải là giải pháp 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ô dụng.

Để đáp ứng những trường hợp sử dụng này, phiên bản bộ sưu tập của chúng tôi ở phía thiết bị tồn tại và có thể sử dụng trong mọi khả năng đo lường "AndroidJUnitRunner". Bạn có thể triển khai BaseMetricListener để 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 Tradefed.

Nếu đang sử dụng trình chạy "AndroidJUnitTest" từ Tradefed, bạn chỉ cần chỉ định tuỳ chọn dòng lệnh sau để trình thu thập dữ liệu chạy cùng với các chương trình kiểm thử:

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

TRÁNH LẤN CẤN: Để các lớp trình thu thập được phân giải trong thời gian chạy, APK đo lường của bạn rất có thể sẽ cần đưa các lớp đó vào một cách tĩnh bằng cách thêm vào tệp makefile như sau:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

Chúng tôi cũng hoan nghênh các đóng góp cho trình thu thập dữ liệu phía thiết bị.

Những điểm cần cân nhắc đặc biệt đối với phòng suite

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

Để đảm bảo việc thu thập chỉ số được áp dụng đồng đều cho từng 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 trên từng mô-đun của bộ công cụ.

Thu thập tệp nhật ký thiết bị từ một mô-đun

Bạn có thể thiết lập để kiểm thử phía thiết bị 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 các tệp đó.

  <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 kéo và ghi nhật ký tệp liên kết.

Để tạo các khoá này, quy trình kiểm thử phía thiết bị (thiết bị đo lường) phải chỉ định tệp cần 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ủ lưu trữ (như mô tả ở trên).

  1. Thêm collector-device-lib vào APK kiểm thử trong tệp make:
  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
  1. Sử dụng @rule mà chúng tôi cung cấp để ghi nhật ký tệp:
    @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 báo cáo. Đây là tên bạn phải khớp trong FilePullerDeviceMetricCollector để tự động lấy tên này. Đây phải là tên duy nhất.

LƯU Ý: Sau khi tệp được kéo, FilePullerDeviceMetricCollector sẽ tự động xoá tệp đó khỏi thiết bị.

Tôi có thể tìm thấy các chỉ số này ở đâu?

Điều này tuỳ thuộc vào result_reporter được chỉ định trong cấu hình XML.