AndroidJUnitRunner

Lớp AndroidJUnitRunner là một trình chạy kiểm thử JUnit cho phép bạn chạy các kiểm thử JUnit 4 được đo lường trên các thiết bị Android, bao gồm cả các kiểm thử 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ử vào 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 mã kiểm thử 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 đo lường để xác thực rằng thao tác changeText trong lớp ChangeTextBehavior hoạt động chính xác:

Kotlin

@RunWith(AndroidJUnit4::class)
@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)
@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 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 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, đối tượng ứng dụng kiểm thử Context và các đối số dòng lệnh được truyền vào kiểm thử.

Lọc kiểm thử

Trong các bài kiểm thử JUnit 4.x, bạn có thể sử dụng chú thích để định cấu hình quá trình chạy 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 trong các bài kiểm thử. Ngoài các chú thích chuẩn do 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 quy trình kiểm thử chỉ chạy trên các 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 cấp độ API Android thấp hơn cấp độ đã cho. Ví dụ: để ngăn chạy các bài kiểm thử trên tất cả các cấp độ API thấp hơn 23, hãy sử dụng chú thích @SDKSuppress(minSdkVersion=23).
  • @SmallTest, @MediumTest@LargeTest: Phân loại thời gian chạy kiểm thử và do đó, 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 các chương trình kiểm thử cần 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 các nhóm hoặc mảnh. 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 kiểm thử thuộc cùng một phân đoạn với nhau dưới dạng một nhóm. Mỗi phân mảnh được xác định bằng một 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à 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 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 ngay 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ử:

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

Việc tách biệt này có thể làm tăng thời gian thực thi kiểm thử 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 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 trong Android Studio

Để bật Android Test Orchestrator trong Android Studio, hãy thêm các câu lệnh hiển thị trong phần Bật từ Gradle vào 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 cài đặt Android Test Orchestrator, sau đó sử dụng 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 để 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. Thêm 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 từ dòng lệnh.

Kiến trúc

APK dịch vụ của Trình điều phối được lưu trữ trong một quy trình riêng 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 bài kiểm thử JUnit
Hình 1: Cấu trúc APK của Android Test Orchestration.

Android Test Orchestrator thu thập các bài kiểm thử JUnit khi bắt đầu chạy bộ kiểm thử, nhưng sau đó thực thi từng bài kiểm thử riêng biệt trong phiên bản 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: 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ử.