Báo cáo chỉ số hoặc dữ liệu từ kiểm thử Tradefed

Trang này mô tả cách báo cáo các chỉ số cùng với kết quả kiểm thử khi viết một chương trình kiểm thử trong Tradefed.

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. 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 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 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 – Kiểm thử Tradefed thuần tuý

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ủ lưu trữ

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ó sẵn cho nhiều trường hợp sử dụng, nhưng chúng tôi luôn hoan nghênh các nội dung đóng góp mới.

Để chỉ định trình thu thập sẽ được sử dụng trong lệnh gọi Tradefeed của bạn, 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ó: * Bộ thu nhiệt thu thập nhiệt độ theo định kỳ trong quá trình chạy thử nghiệm. * 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 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ô dụng.

Để đáp ứng các trường hợp sử dụng này, chúng tôi có một phiên bản trình thu thập dữ liệu phía thiết bị và có thể sử dụng trong bất kỳ hoạt động đo lường nào của "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 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 với 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 bao gồm 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ị.

Lưu ý đặc biệt đối với bộ ứng dụng

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

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 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 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ủ 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. 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 bạn nên so khớp trong FilePullerDeviceMetricCollector để tự động lấy tên đó. Tên nà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 phụ thuộc vào result_reporter được chỉ định trong cấu hình XML của bạn.