Trang này mô tả cách viết kiểm thử thiết bị kiểu JUnit4 do máy chủ điều khiển. Điều này có nghĩa là phía máy chủ của dây nịt sẽ kích hoạt các hành động đối với thiết bị.
Xin lưu ý rằng chúng tôi xem xét các kiểm thử "bên máy chủ lưu trữ" và kiểm thử "do máy chủ lưu trữ điều khiển" có một chút khác biệt:
- kiểm thử do máy chủ lưu trữ: Là kiểm thử chạy trên máy chủ lưu trữ tương tác với một hoặc nhiều thiết bị. Hệ thống đang được kiểm thử (SUT) không nằm trên chính máy chủ lưu trữ mà đang được kiểm thử từ máy chủ lưu trữ.
- kiểm thử phía máy chủ: Là một kiểm thử chỉ chạy trên máy chủ và chỉ kiểm thử một nội dung nào đó trên máy chủ, ví dụ: kiểm thử đơn vị.
Tại sao bạn nên tạo kiểm thử do máy chủ điều khiển thay vì kiểm thử đo lường?
Một số quy trình kiểm thử có thể yêu cầu bạn tác động đến trạng thái tổng thể của thiết bị, chẳng hạn như phát lệnh khởi động lại. Trong trường hợp kiểm thử đo lường, việc khởi động lại sẽ huỷ bỏ quá trình đo lường, kiểm thử không thể tiếp tục và không có kết quả nào.
Các chương trình kiểm thử do máy chủ điều khiển cũng có thể thúc đẩy các bước thiết lập bổ sung yêu cầu tương tác với các thiết bị bên ngoài mà chương trình kiểm thử phụ thuộc vào.
Kiểm thử do máy chủ điều khiển có thể xử lý các trường hợp sử dụng này và cho phép kiểm thử nâng cao thiết bị với nhiều tình huống hơn. Nếu bạn đang ở trong tình huống đó, việc viết kiểm thử do máy chủ điều khiển là hợp lý nhất.
Bài kiểm thử do máy chủ điều khiển được viết như thế nào trong TF?
Bạn có thể tham khảo ví dụ sau đây:
@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
@Before
public void setUp() throws Exception {
// Some setup
}
@Test
public void testCheckWeHaveDevice() throws Exception {
Assert.assertNotNull(getDevice());
}
}
Các kiểm thử do máy chủ điều khiển trong Trade Federation được điều khiển bởi trình chạy kiểm thử JUnit4 DeviceJUnit4ClassRunner. Cấu trúc tổng thể của lớp kiểm thử giống với kiểm thử JUnit4 thông thường:
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
Việc mở rộng BaseHostJunit4Test là một cách để kế thừa API tiện ích kiểm thử hữu ích, chẳng hạn như:
installPackage
: Cho phép cài đặt một tệp APK trên thiết bị mục tiêu.installPackageAsUser
: Cho phép cài đặt tệp APK dưới dạng người dùng trên thiết bị mục tiêu.uninstallPackage
: Cho phép gỡ cài đặt tệp APK.isPackageInstalled
: Kiểm tra xem một gói có được cài đặt hay không.hasDeviceFeature
: Kiểm tra xem thiết bị có hỗ trợ một tính năng hay không. (pm list features
)runDeviceTests(DeviceTestRunOptions options)
: Chạy kiểm thử đo lường trên một thiết bị mục tiêu bằng cách sử dụng DeviceTestRunOptions để xử lý tất cả các tuỳ chọn có thể.
Ngoài ra, hãy cấp quyền truy cập vào đối tượng thiết bị Tradefed:
getDevice()
: Trả về đối tượng thiết bị TF để thao tác với thiết bị.getBuild()
: Trả về đối tượng TF thông tin bản dựng để lấy thông tin về bản dựng.getAbi()
: Trả về ABI mà kiểm thử đang chạy.
Hỗ trợ Tradefed: Chuẩn bị và dọn dẹp thiết bị theo lớp
JUnit4 @BeforeClass
và @AfterClass
chỉ áp dụng cho các phương thức tĩnh, điều này khiến bạn không thể sử dụng trình xử lý #getDevice()
để thực hiện một số thao tác thiết lập hoặc dọn dẹp một lần, theo lớp, dành riêng cho thiết bị. Để giải quyết vấn đề này, hãy sử dụng chú giải Tradefed.
- @beforeClassWithInfo: Chạy trước chú thích @BeforeClass
- @AfterClassWithInfo: Chạy sau chú thích @AfterClass
@BeforeClassWithInfo
public static void beforeClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
@AfterClassWithInfo
public static void afterClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
TestInformation
cho phép bạn sử dụng các thuộc tính thiết bị và lưu trữ có thể dùng ở phạm vi tĩnh hoặc không tĩnh. BaseHostJUnit4Test
hỗ trợ lấy TestInformation
trong phạm vi không tĩnh thông qua #getTestInformation()
.
Nếu không mở rộng BaseHostJUnit4Test
, bạn có thể triển khai ITestInformationReceiver
để nhận đối tượng TestInformation
.
Làm cách nào để định cấu hình kiểm thử do máy chủ điều khiển trong Tradefed?
Trong tệp cấu hình XML của Tradefed, các kiểm thử do máy chủ điều khiển sẽ chạy thông qua trình chạy HostTest.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>