Lớp AndroidJUnitRunner
là một trình chạy kiểm thử JUnit
cho phép bạn chạy các bài kiểm thử JUnit 4 được đo lường trên thiết bị Android,
bao gồm cả những người dùng Espresso, UI Automator và Compose
khung kiểm thử.
Trình chạy kiểm thử này xử lý việc tải gói kiểm thử của bạn và ứng dụng đang được kiểm thử lên một thiết bị, chạy thử nghiệm và báo cáo kết quả thử nghiệm.
Trình chạy kiểm thử này hỗ trợ một số tác vụ kiểm thử phổ biến, bao gồm:
Viết mã kiểm thử JUnit
Đoạn mã sau đây cho bạn biết cách viết một JUnit 4 được đo lường
kiểm thử để xác thực rằng hoạt động changeText
trong ChangeTextBehavior
lớp hoạt động chính xác:
Kotlin
@RunWith(AndroidJUnit4::class) // Only needed when mixing JUnit 3 and 4 tests @LargeTest // Optional runner annotation class ChangeTextBehaviorTest { val stringToBeTyped = "Espresso" // ActivityTestRule accesses context through the runner @get:Rule val activityRule = ActivityTestRule(MainActivity::class.java) @Test fun changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()) onView(withId(R.id.changeTextBt)).perform(click()) // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))) } }
Java
@RunWith(AndroidJUnit4.class) // Only needed when mixing JUnit 3 and 4 tests @LargeTest // Optional runner annotation public class ChangeTextBehaviorTest { private static final String stringToBeTyped = "Espresso"; @Rule public ActivityTestRule<MainActivity>; activityRule = new ActivityTestRule<>;(MainActivity.class); @Test public void changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()); onView(withId(R.id.changeTextBt)).perform(click()); // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))); } }
Truy cập vào ngữ cảnh của ứng dụng
Khi sử dụng AndroidJUnitRunner
để chạy kiểm thử, bạn có thể truy cập vào ngữ cảnh
cho ứng dụng đang được kiểm thử bằng cách gọi phương thức tĩnh
ApplicationProvider.getApplicationContext()
. Nếu bạn đã tạo một
lớp con của Application
trong ứng dụng, phương thức này sẽ trả về
ngữ cảnh của lớp con.
Nếu là người triển khai công cụ, bạn có thể truy cập vào các API kiểm thử cấp thấp bằng cách sử dụng
Lớp InstrumentationRegistry
. Lớp này bao gồm
Đối tượng Instrumentation
, đối tượng ứng dụng mục tiêu Context
, chương trình kiểm thử
đối tượng Context
của ứng dụng và các đối số dòng lệnh được truyền vào chương trình kiểm thử của bạn.
Lọc thử nghiệm
Trong các chương trình kiểm thử JUnit 4.x, bạn có thể sử dụng chú giải để định cấu hình chạy kiểm thử. Chiến dịch này giúp giảm thiểu nhu cầu thêm mã nguyên mẫu và mã có điều kiện vào kiểm thử. Ngoài các chú thích tiêu chuẩn mà JUnit 4 hỗ trợ, quy trình kiểm thử Runner cũng hỗ trợ chú thích dành riêng cho Android, bao gồm sau:
@RequiresDevice
: Chỉ định rằng thử nghiệm chỉ nên chạy trên thiết bị thực chứ không phải trên trình mô phỏng.@SdkSuppress
: Ngăn kiểm thử chạy trên một API Android thấp hơn cấp độ so với cấp độ nhất định. Ví dụ: để chặn các bài kiểm thử ở tất cả các cấp độ API thấp hơn 23 khỏi thời gian chạy, hãy sử dụng chú giải@SDKSuppress(minSdkVersion=23)
.@SmallTest
,@MediumTest
và@LargeTest
: Phân loại thời lượng kiểm thử thời gian chạy cũng như tần suất bạn có thể chạy kiểm thử. Bạn có thể sử dụng chú thích này để lọc thử nghiệm nào sẽ chạy, đặt giá trị Thuộc tínhandroid.testInstrumentationRunnerArguments.size
:
-Pandroid.testInstrumentationRunnerArguments.size=small
Kiểm thử phân đoạn
Nếu bạn cần chạy song song việc triển khai các thử nghiệm, hãy chia sẻ các thử nghiệm đó trên
nhiều máy chủ giúp chúng chạy nhanh hơn, bạn có thể chia chúng thành các nhóm hoặc
phân đoạn. Trình chạy kiểm thử hỗ trợ chia một bộ kiểm thử duy nhất thành nhiều bộ kiểm thử
phân đoạn để bạn có thể dễ dàng chạy các phép kiểm thử thuộc cùng một phân đoạn với nhau dưới dạng
nhóm. Mỗi phân đoạn được xác định bằng số chỉ mục. Khi chạy kiểm thử, hãy sử dụng
Tuỳ chọn -e numShards
để chỉ định số lượng phân đoạn riêng biệt cần tạo và
-e shardIndex
để chỉ định phân đoạn nào cần chạy.
Ví dụ: chia bộ kiểm thử thành 10 phân đoạn và chỉ chạy các chương trình kiểm thử được nhóm vào phân đoạn thứ hai, hãy sử dụng lệnh adb sau:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
Sử dụng Android Test Orchestrator
Android Test Orchestrator cho phép bạn chạy từng bài kiểm thử của ứng dụng trong
lệnh gọi Instrumentation
riêng. Khi sử dụng AndroidJUnitRunner phiên bản 1.0
trở lên, bạn có quyền truy cập vào Android Test Orchestrator.
Android Test Orchestrator mang đến những lợi ích sau đây cho quá trình kiểm thử của bạn môi trường:
- Trạng thái dùng chung tối thiểu: Mỗi kiểm thử chạy trong
Instrumentation
riêng thực thể. Do đó, nếu kiểm thử của bạn có chung trạng thái ứng dụng, thì hầu hết trạng thái dùng chung đó sẽ bị xoá khỏi CPU hoặc bộ nhớ của thiết bị sau mỗi lần kiểm tra. Cách xoá tất cả trạng thái chia sẻ khỏi CPU và bộ nhớ của thiết bị sau mỗi lần kiểm thử, hãy sử dụng cờclearPackageData
. Hãy xem bài viết Bật trong Gradle làm ví dụ. - Các sự cố riêng biệt: Ngay cả khi một thử nghiệm gặp sự cố, thử nghiệm đó chỉ gỡ bỏ
bản sao riêng của
Instrumentation
. Điều này có nghĩa là các bài kiểm thử khác trong bộ công cụ của bạn vẫn chạy, cung cấp kết quả thử nghiệm hoàn chỉnh.
Việc tách biệt này có thể làm tăng thời gian chạy thử nghiệm vì Android Test Orchestrator khởi động lại ứng dụng sau mỗi lần kiểm thử.
Cả Android Studio và Phòng thử nghiệm Firebase đều có Android Test Orchestrator được cài đặt sẵn, mặc dù bạn cần bật tính năng này trong Android Studio.
Bật từ Gradle
Để bật Android Test Orchestrator bằng công cụ dòng lệnh Gradle, hãy hoàn thành các bước sau:
- Bước 1: Sửa đổi tệp gradle. Thêm các tuyên bố sau vào
tệp
build.gradle
của dự án:
android {
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
dependencies {
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestUtil 'androidx.test:orchestrator:1.1.0'
}
- Bước 2: Chạy Android Test Orchestrator bằng cách thực thi lệnh sau:
./gradlew connectedCheck
Bật trong Android Studio
Để bật Android Test Orchestrator trong Android Studio, hãy thêm các câu lệnh được hiển thị
trong phần Enable from Gradle (Bật từ Gradle) cho tệp build.gradle
của ứng dụng.
Bật từ dòng lệnh
Để sử dụng Android Test Orchestrator trên dòng lệnh, hãy chạy các lệnh sau trong cửa sổ dòng lệnh:
DEVICE_API_LEVEL=$(adb shell getprop ro.build.version.sdk)
FORCE_QUERYABLE_OPTION=""
if [[ $DEVICE_API_LEVEL -ge 30 ]]; then
FORCE_QUERYABLE_OPTION="--force-queryable"
fi
# uninstall old versions
adb uninstall androidx.test.services
adb uninstall androidx.test.orchestrator
# Install the test orchestrator.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/orchestrator/1.4.2/orchestrator-1.4.2.apk
# Install test services.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/services/test-services/1.4.2/test-services-1.4.2.apk
# Replace "com.example.test" with the name of the package containing your tests.
# Add "-e clearPackageData true" to clear your app's data in between runs.
adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / \
androidx.test.services.shellexecutor.ShellMain am instrument -w -e \
targetInstrumentation com.example.test/androidx.test.runner.AndroidJUnitRunner \
androidx.test.orchestrator/.AndroidTestOrchestrator'
Như cú pháp lệnh cho thấy, bạn hãy cài đặt Android Test Orchestrator, sau đó sử dụng công cụ này trực tiếp.
adb shell pm list instrumentation
Sử dụng các chuỗi công cụ khác nhau
Nếu sử dụng một chuỗi công cụ khác để thử nghiệm ứng dụng, bạn vẫn có thể sử dụng Android Test Orchestrator bằng cách hoàn thành các bước sau:
- Đưa các gói cần thiết vào tệp bản dựng của ứng dụng.
- Bật Android Test Orchestrator từ dòng lệnh.
Kiến trúc
APK dịch vụ Orchestrator được lưu trữ trong một quy trình tách biệt với APK kiểm thử và APK của ứng dụng đang được kiểm thử:
Android Test Orchestrator thu thập các bài kiểm thử JUnit ở đầu bài kiểm thử của bạn
bộ kiểm thử, nhưng sau đó thực thi từng bài kiểm thử riêng biệt trong một thực thể riêng của
Instrumentation
.
Thông tin khác
Để tìm hiểu thêm về cách sử dụng AndroidJUnitRunner, hãy xem tài liệu tham khảo API.
Tài nguyên khác
Để biết thêm thông tin về cách sử dụng AndroidJUnitRunner
, hãy tham khảo những nội dung sau
của chúng tôi.
Mẫu
- AndroidJunitRunnerSample: Giới thiệu các chú thích kiểm thử, kiểm thử có tham số và tạo bộ kiểm thử.