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 mộ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ộ khung sẽ kích hoạt các thao tác đối với thiết bị.

Xin lưu ý rằng chúng tôi coi các kiểm thử "phía máy chủ" và kiểm thử "do máy chủ điều khiển" là hơi khác nhau:

  • kiểm thử dựa trên máy chủ lưu trữ: Là một kiểm thử chạy trên máy chủ lưu trữ và 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ưu trữ: Là một hoạt động kiểm thử chỉ chạy trên máy chủ lưu trữ và kiểm thử một thứ gì đó chỉ trên máy chủ lưu trữ, ví dụ: kiểm thử đơn vị.

Tại sao nên tạo một kiểm thử dựa trên máy chủ lưu trữ thay vì một kiểm thử đo lường?

Một số 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ư 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ẽ kết thúc quy trình đo lường, quá trình kiểm thử không thể tiếp tục và không có kết quả.

Các kiểm thử do máy chủ lưu trữ đ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à kiểm thử phụ thuộc vào.

Một kiểm thử do máy chủ lưu trữ điều khiển có thể xử lý những 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 trường hợp hơn. Nếu bạn đang ở trong tình huống đó, thì việc viết một kiểm thử dựa trên máy chủ lưu trữ sẽ hợp lý nhất.

Các bài kiểm thử do máy chủ lưu trữ điều khiển được viết như thế nào trong TF?

Sau đâ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 kiểm thử do máy chủ lưu trữ đ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 cấu trúc của một 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 APK trên thiết bị đích.
  • installPackageAsUser: Cho phép cài đặt một APK dưới dạng người dùng trên thiết bị đích.
  • uninstallPackage: Cho phép gỡ cài đặt mộ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 một kiểm thử đo lường trên một thiết bị đích bằng cách sử dụng DeviceTestRunOptions để xử lý tất cả các lựa 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ề một đối tượng thiết bị TF để thao tác với thiết bị.
  • getBuild(): Trả về một đố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

@BeforeClass@AfterClass của JUnit4 chỉ áp dụng cho các phương thức tĩnh, điều này khiến bạn không thể 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, dành riêng cho thiết bị và theo từng lớp. Để 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 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 nhận TestInformation trong một 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 kiểm thử dựa trên máy chủ lưu trữ trong Tradefed?

Trong tệp cấu hình XML Tradefed, các kiểm thử do máy chủ lưu trữ đ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>