Kiểm thử dựa trên các thay đổi về cấu hình màn hình bằng Espresso Device API

Sử dụng Espresso Device API để kiểm thử ứng dụng của bạn khi thiết bị trải qua các thay đổi phổ biến về cấu hình, chẳng hạn như thao tác xoay và mở màn hình. Espresso Device API cho phép bạn mô phỏng những thay đổi về cấu hình này trên một thiết bị ảo và thực thi kiểm thử một cách đồng bộ, nhờ đó, mỗi lần chỉ có một hành động hoặc câu nhận định trên giao diện người dùng duy nhất và kết quả kiểm thử sẽ đáng tin cậy hơn. Nếu bạn mới viết mã kiểm thử giao diện người dùng bằng Espresso, hãy xem tài liệu về quy trình đó.

Để sử dụng Espresso Device API, bạn cần:

  • Android Studio Iguana trở lên
  • Trình bổ trợ Android cho Gradle 8.3 trở lên
  • Trình mô phỏng Android 33.1.10 trở lên
  • Thiết bị ảo Android chạy API cấp 24 trở lên

Thiết lập dự án cho Espresso Device API

Để thiết lập dự án nhằm hỗ trợ Espresso Device API, hãy làm như sau:

  1. Để cho phép các lệnh kiểm thử truyền các lệnh đến thiết bị kiểm thử, hãy thêm quyền INTERNETACCESS_NETWORK_STATE vào tệp kê khai trong nhóm tài nguyên androidTest:

      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permissions.ACCESS_NETWORK_STATE" />
      
  2. Bật cờ thử nghiệm enableEmulatorControl trong tệp gradle.properties:

      android.experimental.androidTest.enableEmulatorControl=true
      
  3. Bật lựa chọn emulatorControl trong tập lệnh bản dựng cấp mô-đun:

    Kotlin

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      

    Groovy

      testOptions {
        emulatorControl {
          enable = true
        }
      }
      
  4. Trong tập lệnh bản dựng cấp mô-đun, hãy nhập thư viện Thiết bị Espresso vào dự án của bạn:

    Kotlin

      dependencies {
        androidTestImplementation("androidx.test.espresso:espresso-device:3.5.1")
      }
      

    Groovy

      dependencies {
        androidTestImplementation 'androidx.test.espresso:espresso-device:3.5.1'
      }
      

Kiểm thử dựa trên các thay đổi phổ biến về cấu hình

Espresso Device API có nhiều hướng màn hình và trạng thái có thể gập lại mà bạn có thể dùng để mô phỏng các thay đổi về cấu hình thiết bị.

Kiểm thử dựa trên tính năng xoay màn hình

Dưới đây là ví dụ về cách kiểm thử những gì sẽ xảy ra với ứng dụng của bạn khi màn hình thiết bị xoay:

  1. Trước tiên, để có trạng thái khởi động nhất quán, hãy đặt thiết bị ở chế độ dọc:

      import androidx.test.espresso.device.action.ScreenOrientation
      import androidx.test.espresso.device.rules.ScreenOrientationRule
      ...
      @get:Rule
      val screenOrientationRule: ScreenOrientationRule = ScreenOrientationRule(ScreenOrientation.PORTRAIT)
      
  2. Tạo một chương trình kiểm thử đặt thiết bị theo hướng ngang trong quá trình chạy kiểm thử:

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        ...
      }
      
  3. Sau khi màn hình xoay, hãy kiểm tra để đảm bảo rằng giao diện người dùng thích ứng với bố cục mới như dự kiến.

      @Test
      fun myRotationTest() {
        ...
        // Sets the device to landscape orientation during test execution.
        onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE)
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assertDoesNotExist()
      }
      

Kiểm thử so với hoạt động mở màn hình

Dưới đây là ví dụ về cách kiểm thử điều gì sẽ xảy ra với ứng dụng của bạn nếu ứng dụng nằm trên thiết bị có thể gập lại và màn hình mở ra:

  1. Trước tiên, hãy kiểm thử thiết bị ở trạng thái gập bằng cách gọi onDevice().setClosedMode(). Đảm bảo rằng bố cục của ứng dụng thích ứng với chiều rộng màn hình thu gọn.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed()
        composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist()
        ...
      }
      
  2. Để chuyển sang trạng thái mở hoàn toàn, hãy gọi onDevice().setFlatMode(). Kiểm tra để đảm bảo bố cục của ứng dụng thích ứng với lớp kích thước mở rộng.

      @Test
      fun myUnfoldedTest() {
        onDevice().setClosedMode()
        ...
        onDevice().setFlatMode()
        composeTestRule.onNodeWithTag("NavRail").assertIsDisplayed()
        composeTestRule.onNodeWithTag("BottomBar").assetDoesNotExist()
      }
      

Chỉ định những thiết bị cần thiết cho quá trình kiểm thử

Nếu bạn đang chạy một kiểm thử thực hiện các thao tác gập trên một thiết bị không thể gập lại, thì kiểm thử đó có thể sẽ không thành công. Để chỉ thực thi các hoạt động kiểm thử liên quan đến thiết bị đang chạy, hãy sử dụng chú thích @RequiresDeviceMode. Trình chạy kiểm thử sẽ tự động bỏ qua việc chạy các chương trình kiểm thử trên các thiết bị không hỗ trợ cấu hình đang được kiểm thử. Bạn có thể thêm quy tắc yêu cầu về thiết bị vào mỗi lượt kiểm thử hoặc toàn bộ lớp kiểm thử.

Ví dụ: để xác định rằng chỉ nên chạy chương trình kiểm thử trên các thiết bị hỗ trợ mở màn hình vào một cấu hình phẳng, hãy thêm mã @RequiresDeviceMode sau đây vào chương trình kiểm thử của bạn:

@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
  ...
}