AndroidJUnitRunner

Lớp AndroidJUnitRunner là một trình chạy kiểm thử JUnit cho phép bạn chạy các hoạt động kiểm thử JUnit 4 được đo lường trên thiết bị Android, bao gồm cả những hoạt động sử dụng khung kiểm thử Espresso, UI AutomatorCompose.

Trình chạy kiểm thử xử lý việc tải gói kiểm thử và ứng dụng đang được kiểm thử trên một thiết bị, chạy kiểm thử và báo cáo kết quả kiểm thử.

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 thử nghiệm JUnit

Đoạn mã sau đây cho biết cách bạn có thể viết một chương trình kiểm thử JUnit 4 được đo lường để xác thực rằng hoạt động changeText trong lớp ChangeTextBehavior hoạt động đúng cách:

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 chương trình kiểm thử, bạn có thể truy cập vào ngữ cảnh của ứng dụng đang được kiểm thử bằng cách gọi phương thức ApplicationProvider.getApplicationContext() tĩnh. Nếu bạn đã tạo một lớp con tuỳ chỉnh của Application trong ứng dụng, phương thức này sẽ trả về ngữ cảnh của lớp con tuỳ chỉnh.

Nếu là người triển khai công cụ, bạn có thể truy cập 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 Context của ứng dụng mục tiêu, đối tượng Context của ứng dụng kiểm thử và các đối số dòng lệnh được truyền vào hoạt động kiểm thử của bạn.

Kiểm thử bộ lọc

Trong các thử nghiệm JUnit 4.x, bạn có thể sử dụng chú giải để định cấu hình chạy các chương trình kiểm thử. Tính năng 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 chương trình kiểm thử. Ngoài các chú giải chuẩn được JUnit 4 hỗ trợ, trình chạy kiểm thử cũng hỗ trợ các chú thích dành riêng cho Android, bao gồm:

  • @RequiresDevice: Chỉ định rằng chương trình kiểm thử 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 quy trình kiểm thử chạy ở cấp độ API Android thấp hơn cấp đã cấp. Ví dụ: để ngăn các bài kiểm thử ở mọi cấp độ API thấp hơn 23 chạy, hãy sử dụng chú giải @SDKSuppress(minSdkVersion=23).
  • @SmallTest, @MediumTest@LargeTest: Phân loại thời gian chạy một kiểm thử và do đó là tần suất bạn có thể chạy kiểm thử đó. Bạn có thể sử dụng chú giải này để lọc những kiểm thử sẽ chạy, đặt thuộc tính android.testInstrumentationRunnerArguments.size:
-Pandroid.testInstrumentationRunnerArguments.size=small

Kiểm thử phân đoạn

Nếu cần thực thi song song các chương trình kiểm thử, chia sẻ các chương trình kiểm thử đó trên nhiều máy chủ để chạy nhanh hơn, bạn có thể chia các chương trình kiểm thử thành nhóm hoặc phân đoạn. Trình chạy kiểm thử hỗ trợ việc chia một bộ kiểm thử thành nhiều phân đoạn, nhờ đó, bạn có thể dễ dàng chạy các chương trình kiểm thử thuộc cùng một phân đoạn dưới dạng một nhóm. Mỗi phân đoạn được xác định bằng một số chỉ mục. Khi chạy chương trình 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à tuỳ chọn -e shardIndex để chỉ định phân đoạn 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 trong 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 lại các lợi ích sau đây cho môi trường kiểm thử của bạn:

  • Trạng thái chia sẻ tối thiểu: Mỗi lượt kiểm thử chạy trong một thực thể Instrumentation riêng. Do đó, nếu các 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 thử. Để xoá tất cả trạng thái dùng chung 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 phần Bật từ Gradle để biết ví dụ.
  • Sự cố được tách riêng: Ngay cả khi một bài kiểm thử gặp sự cố, thì chỉ có thực thể Instrumentation bị gỡ bỏ. Điều này có nghĩa là các bài kiểm thử khác trong bộ ứng dụng của bạn vẫn chạy, cung cấp kết quả kiểm thử hoàn chỉnh.

Việc tách biệt này có thể làm tăng thời gian thực thi kiểm thử khi 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 cài đặt sẵn Android Test Orchestrator, 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 câu lệnh 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 trên Android Studio

Để bật Android Test Orchestrator trong Android Studio, hãy thêm các câu lệnh hiển thị trong bài viết Bật từ Gradle vào tệp build.gradle của ứng dụng.

Bật qua 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 một 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 sẽ cài đặt Android Test Orchestrator, sau đó sử dụng trực tiếp Android Test Orchestrator.

adb shell pm list instrumentation

Sử dụng nhiều chuỗi công cụ

Nếu sử dụng một chuỗi công cụ khác để kiểm thử ứ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:

  1. Đưa các gói cần thiết vào tệp bản dựng của ứng dụng.
  2. Bật Android Test Orchestrator qua dòng lệnh.

Cấu 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 kiểm thử:

Trình điều phối cho phép bạn kiểm soát các thử nghiệm JUnit
Hình 1: Cấu trúc tệp APK Điều phối kiểm thử Android.

Android Test Orchestrator thu thập các bài kiểm thử JUnit khi bắt đầu quá trình chạy bộ kiểm thử, nhưng sau đó thực thi riêng từng bài kiểm thử trong thực thể Instrumentation riêng.

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 các tài nguyên sau.

Mẫu

  • AndroidJunitRunnerSample: Cho thấy các chú giải kiểm thử, kiểm thử có tham số và quá trình tạo bộ kiểm thử.