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