Viết bài kiểm tra theo hướng máy chủ trong Liên đoàn Thương mại

Trang này mô tả cách viết bài kiểm tra thiết bị kiểu JUnit4 do máy chủ điều khiển. Điều này có nghĩa là phía chủ của dây nịt sẽ kích hoạt các hành động chống lại thiết bị.

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

  • Kiểm tra dựa trên máy chủ: Là thử nghiệm 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 được thử nghiệm (SUT) không nằm trên máy chủ mà đang được thử nghiệm từ máy chủ.
  • Kiểm tra phía máy chủ: Là thử nghiệm hoàn toàn chạy trên máy chủ và chỉ kiểm tra một cái gì đó trên máy chủ, ví dụ như kiểm tra đơn vị.

Tại sao lại tạo thử nghiệm dựa trên máy chủ thay vì thử nghiệm thiết bị đo đạc?

Một số thử nghiệm có thể yêu cầu bạn tác động đến trạng thái chung 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ử thiết bị, việc khởi động lại sẽ làm hỏng thiết bị, thử nghiệm không thể tiếp tục và không có kết quả.

Các thử nghiệm 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à thử nghiệm phụ thuộc vào.

Thử nghiệm dựa trên máy chủ có thể xử lý các trường hợp sử dụng này và cho phép thử nghiệm 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 bài kiểm tra do máy chủ điều khiển là hợp lý nhất.

Các bài kiểm tra dựa trên máy chủ được viết bằng TF như thế nào?

Đây là một mẫu:

@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 thử nghiệm dựa trên máy chủ trong Liên đoàn Thương mại được điều khiển bởi trình chạy thử nghiệm DeviceJUnit4ClassRunner JUnit4. Cấu trúc tổng thể của lớp kiểm tra giống như bài kiểm tra JUnit4 thông thường:

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

Mở rộng BaseHostJunit4Test là cách kế thừa các API tiện ích kiểm thử hữu ích 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 với tư cách người dùng trên thiết bị mục tiêu.
  • uninstallPackage : Cho phép gỡ cài đặt APK.
  • isPackageInstalled : Kiểm tra xem 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 thử nghiệm thiết bị đo đối với thiết bị mục tiêu bằng cách sử dụng DeviceTestRunOptions để xử lý tất cả các tùy chọn có thể.

Đồng thời 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 tra đang chạy.

Hỗ trợ được giao dịch: Chuẩn bị và dọn dẹp thiết bị cho mỗi lớp

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

Nếu bạn 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 thử nghiệm dựa trên máy chủ trong Tradefed?

Trong tệp cấu hình Tradefed XML, các thử nghiệm dựa trên máy chủ đượ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>