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).
- Thêm
collector-device-lib
vào APK kiểm thử trong tệp make:
LOCAL_STATIC_JAVA_LIBRARIES += collector-device-lib
- 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.