Báo cáo số liệu hoặc dữ liệu từ bài kiểm tra Tradefed

Trang này mô tả cách báo cáo số liệu cùng với kết quả kiểm tra khi viết bài kiểm tra trong Tradefed.

Lợi ích của việc đăng nhập thông qua quy trình Tradefed là tìm số liệu cùng với các kết quả chức năng của bạn. Việc ghi lại các số liệu có thể được thực hiện rất tự nhiên trong các bài kiểm tra, điều này giúp người viết bài kiểm tra thuận tiện hơn trong việc bổ sung thêm nhiều công cụ đo lường.

DeviceTestCase - kiểu JUnit3

Nếu thử nghiệm của bạn mở rộng DeviceTestCase theo loại thử nghiệm 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 thử nghiệm nào để báo cáo số liệu. Điều này có thể được gọi nhiều lần miễn là khóa 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 bạn 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 thử nghiệm nào để báo cáo tệp cần ghi.

Ví dụ:

    public static class TestLogTestCase extends DeviceTestCase {

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

TestCase - kiểm tra JUnit3 thường xuyên

Nếu bạn muốn báo cáo các số liệu bên trong Tradefed từ một lớp JUnit3 TestCase thông thường, thì nó sẽ cần phải được chuyển đổi thành MetricTestCase thay vào đó là 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 nhật ký số liệu trong một trường hợp thử nghiệm (bên trong @Test) để Tradefed báo cáo. Bạn sẽ cần sử dụng các quy tắc TestMetrics để báo cáo số liệu 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.

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 giao dịch thuần túy

Nếu bạn đang viết lớp hoặc trình chạy Tradefed Test của riêng mình, bạn sẽ triển khai 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ý số liệu như sau:

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

Trình thu thập số liệu được giao dịch

Tradefed cung cấp đối tượng metrics_collector chuyên dụng để thu thập số liệu song song với các thử nghiệm.

Về phía chủ nhà

BaseDeviceMetricCollector có thể được triển khai để thu thập bất kỳ số liệu nào từ phía máy chủ và báo cáo chúng như một phần của lệnh gọi thử nghiệm. Một số bộ sưu tậ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 những đóng góp mới.

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

Ví dụ:

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

Một số bộ thu nhiệt hiện có: * Bộ thu nhiệt độ thu thập nhiệt độ định kỳ trong quá trình chạy thử. * AtraceCollector thu thập bằng cách sử dụng 'atrace' cho từng trường hợp thử nghiệm.

Về phía thiết bị

Khi chạy thử nghiệm phía thiết bị (Công cụ, thử nghiệm UIAutomator, v.v.), việc có bộ thu thập ở phía máy chủ thu thập 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à vô dụng.

Để đáp ứng các trường hợp sử dụng này, phiên bản phía thiết bị của bộ sưu tập của chúng tôi đã tồn tại và có thể được sử dụng trong bất kỳ công cụ 'AndroidJUnitRunner' nào. BaseMetricListener có thể được triển khai để tự động báo cáo các số liệu đượ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 trình chạy ' AndroidJUnitTest ' từ Tradefed, bạn có thể chỉ cần chỉ định tùy chọn dòng lệnh sau để bộ sưu tập của bạn chạy với các thử nghiệm của mình:

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

THẬN TRỌNG: Để các lớp bộ sưu tập được giải quyết trong thời gian chạy, APK công cụ của bạn rất có thể cần phải bao gồm chúng một cách tĩnh bằng cách thêm vào tệp tạo tệp của bạn như sau:

  LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib

Đóng góp cho người thu thập phía thiết bị cũng được hoan nghênh.

Xem xét đặc biệt cho dãy phò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, không cần chỉ định metrics_collector trong mỗi cấu hình mô-đun ( AndroidTest.xml ). Nó thực sự bị cấm.

Để đảm bảo việc thu thập số liệu được áp dụng như nhau 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. Những bộ sưu tập này sẽ được áp dụng và chạy theo từng mô-đun của bộ phần mềm.

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

Một thiết lập có sẵn để kiểm tra 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à lấy 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à khóa này, trình thu thập nếu nhìn thấy khóa sẽ cố gắng kéo và ghi nhật ký tệp liên quan.

Để tạo các khóa này, quá trình kiểm tra phía thiết bị (thiết bị đo đạc) phải chỉ định tệp cần được ghi lại. Nó được thực hiện theo cách tương tự như phía máy chủ (được mô tả ở trên).

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

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

Tôi tìm số liệu ở đâu?

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