Viết bài kiểm thử do người tổ chức thực hiện trong Liên đoàn Thương mại

Trang này mô tả cách viết chương trình kiểm thử thiết bị theo kiểu JUnit4 do máy chủ lưu trữ. Điều này có nghĩa là phía máy chủ của phần khai thác sẽ kích hoạt các hành động chống lại thiết bị.

Xin lưu ý rằng chúng tôi coi "phía máy chủ" kiểm thử và "dựa trên máy chủ" có xu hướng tăng một chút khác nhau:

  • kiểm thử do máy chủ điều khiển: Là kiểm thử chạy trên máy chủ tương tác với một hoặc thiết bị khác. 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ủ.
  • kiểm thử phía máy chủ: Là một kiểm thử chỉ chạy trên máy chủ lưu trữ và kiểm thử một nội dung nào đó chỉ trên máy chủ, ví dụ như 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ố chương 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ư đưa ra khởi động lại. Trong trường hợp kiểm thử đo lường, việc khởi động lại sẽ tắt đo lường, không thể tiếp tục kiểm thử và không có kết quả.

Thử nghiệm do người tổ chức thực hiện cũng có thể thúc đẩy các bước thiết lập bổ sung cần có sự tương tác với các thiết bị bên ngoài mà bài kiểm tra phụ thuộc vào.

Kiểm thử do máy chủ lưu trữ 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 rơi vào trường hợp đó, hãy viết là phù hợp 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 hoạt động kiểm thử do người tổ chức thực hiện trong Trade Federation được thực hiện bởi DeviceJUnit4ClassRunner Trình chạy kiểm thử JUnit4. Cấu trúc tổng thể của lớp kiểm thử cũng giống như thử nghiệm JUnit4 thông thường:

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

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 một tệp APK dưới dạng người dùng trên mục tiêu thiết bị.
  • uninstallPackage: Cho phép gỡ cài đặt tệp 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 hoạt động đo lường kiểm thử so với thiết bị mục tiêu bằng cách sử dụng DeviceTestRunOptions để xử lý tất cả các lựa chọn có thể có.

Đồng thời cung cấp quyền truy cập vào đối tượng thiết bị Tradefeed:

  • getDevice(): Trả về một đối tượng thiết bị TF để điều khiển thiết bị.
  • getBuild(): Trả về đối tượng TF thông tin bản dựng để nhận thông tin về bản dựng.
  • getAbi(): Trả về ABI mà kiểm thử đang chạy.

Dịch vụ hỗ trợ thương mại: Chuẩn bị và dọn dẹp thiết bị cho mỗi 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 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 cho từng thiết bị, một lần, cho từng lớp. Để giải quyết vấn đề này, hãy sử dụng chú thích Tradefeed.

  • @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à cửa hàng mà có thể được sử dụng ở 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 kiểm thử do máy chủ thực hiện trong Tradefeed?

Trong tệp cấu hình XML Tradefeed, các kiểm thử do máy chủ điều khiển được chạy thông qua Kiểm thử trên máy chủ chạy.

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>