Sử dụng API Thiết bị Espresso để kiểm thử ứng dụng khi thiết bị trải qua các thay đổi về cấu hình phổ biến, chẳng hạn như xoay và mở màn hình. API Thiết bị Espresso cho phép bạn mô phỏng các thay đổi về cấu hình này trên một thiết bị ảo và thực thi các bài kiểm thử một cách đồng bộ, vì vậy, chỉ một hành động hoặc câu nhận định trên giao diện người dùng xảy ra tại một thời điểm và kết quả kiểm thử của bạn 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 của Espresso.
Để sử dụng Espresso Device API, bạn cần có:
- 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ị Android ảo 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 sao cho hỗ trợ Espresso Device API, hãy làm như sau:
Để cho phép kiểm thử truyền lệnh đến thiết bị kiểm thử, hãy thêm quyền
INTERNET
vàACCESS_NETWORK_STATE
vào tệp kê khai trong nhóm tài nguyênandroidTest
:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Bật cờ thử nghiệm
enableEmulatorControl
trong tệpgradle.properties
:android.experimental.androidTest.enableEmulatorControl=true
Bật tuỳ 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 } }
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:1.0.1") }
Groovy
dependencies { androidTestImplementation 'androidx.test.espresso:espresso-device:1.0.1' }
Kiểm thử các thay đổi thường gặp 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ể sử 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:
Trước tiên, để có trạng thái bắt đầu nhất quán, hãy đặt thiết bị thành 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)
Tạo một chương trình kiểm thử đặt thiết bị thành hướng ngang trong quá trình thực thi kiểm thử:
@Test fun myRotationTest() { ... // Sets the device to landscape orientation during test execution. onDevice().setScreenOrientation(ScreenOrientation.LANDSCAPE) ... }
Sau khi màn hình xoay, hãy kiểm tra để đảm bảo 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ử đối với thao tác mở màn hình
Dưới đây là ví dụ về cách kiểm thử những gì xảy ra với ứng dụng của bạn nếu ứng dụng đó chạy trên một thiết bị có thể gập lại và màn hình mở ra:
Trước tiên, hãy kiểm thử với thiết bị ở trạng thái gập bằng cách gọi
onDevice().setClosedMode()
. Đảm bảo bố cục của ứng dụng thích ứng với chiều rộng màn hình nhỏ gọn.@Test fun myUnfoldedTest() { onDevice().setClosedMode() composeTestRule.onNodeWithTag("BottomBar").assetIsDisplayed() composeTestRule.onNodeWithTag("NavRail").assetDoesNotExist() ... }
Để 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ị mà kiểm thử của bạn cần
Nếu bạn đang chạy một chương trình 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ì chương trình kiểm thử đó có thể sẽ không thành công. Để chỉ thực thi các 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 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 từng bài kiểm thử hoặc toàn bộ lớp kiểm thử.
Ví dụ: để chỉ định rằng một kiểm thử chỉ nên chạy trên các thiết bị hỗ trợ mở ra cấu hình phẳng, hãy thêm mã @RequiresDeviceMode
sau vào kiểm thử:
@Test
@RequiresDeviceMode(mode = FLAT)
fun myUnfoldedTest() {
...
}