Viết mã kiểm thử do máy chủ điều khiển trong Trade Federation

Trang này mô tả cách viết bài kiểm thử thiết bị theo 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 bộ kiểm thử 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 coi các bài kiểm thử "phía máy chủ" và bài kiểm thử "do máy chủ điều khiển" hơi khác nhau:

  • bài kiểm thử do máy chủ điều khiển: Là bài kiểm thử chạy trên máy chủ tương tác với một hoặc nhiều thiết bị. Hệ thống đang kiểm thử (SUT) không nằm trên chính máy chủ mà đang được kiểm thử từ máy chủ.
  • bài kiểm thử phía máy chủ: Là bài 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ủ, chẳng hạn như bài kiểm thử đơn vị.

Tại sao nên tạo bài kiểm thử do máy chủ điều khiển thay vì bài kiểm thử đo lường?

Một số bài kiểm thử có thể yêu cầu bạn ảnh hưởng đến trạng thái tổng thể của thiết bị, chẳng hạn như đưa ra 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ỷ quy trình đo lường, bài kiểm thử không thể tiếp tục và không có kết quả.

Bài kiểm thử do máy chủ điều khiển cũng có thể điều khiển 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à bài kiểm thử phụ thuộc vào.

Bài 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 đó, thì việc viết bài 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?

Dưới đây là một ví dụ:

@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 bài 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ử DeviceJUnit4ClassRunner JUnit4. Cấu trúc tổng thể của lớp kiểm thử giống như bài kiểm thử JUnit4 thông thường:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume, Assert

Việc mở rộng BaseHostJunit4Test là 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 APK trên thiết bị mục tiêu.
  • installPackageAsUser: Cho phép cài đặt APK dưới dạng người dùng trên thiết bị đích.
  • uninstallPackage: Cho phép gỡ cài đặt APK.
  • isPackageInstalled: Kiểm tra xem một gói đã được cài đặt hay chưa.
  • 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 bài kiểm thử đo lường trên một thiết bị mục tiêu bằng DeviceTestRunOptions để xử lý tất cả các tuỳ chọn có thể có.

Cũng cung 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à bài kiểm thử đang chạy.

Hỗ trợ Tradefed: Chuẩn bị và dọn dẹp thiết bị theo từng lớp

JUnit4 @BeforeClass@AfterClass chỉ áp dụng cho các phương thức tĩnh, khiến bạn không thể sử dụng trình xử lý #getDevice() để thiết lập hoặc dọn dẹp một lần, theo từng lớp và dành riêng cho thiết bị. Để giải quyết vấn đề này, hãy sử dụng chú thích 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 thiết bị và lưu trữ các thuộc tính có thể được dùng trong phạm vi tĩnh hoặc không tĩnh. BaseHostJUnit4Test hỗ trợ việc 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.

Cách định cấu hình bài kiểm thử do máy chủ điều khiển trong Tradefed?

Trong tệp cấu hình XML Tradefed, các bài kiểm thử do máy chủ điều khiển được 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>