AndroidJUnitRunner

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 AutomatorCompose 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 ActivityTestRuleM<ainActivity;> 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@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ính android.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:

  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 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ử:

Orchestrator cho phép bạn kiểm soát các chương trình kiểm thử JUnit
Hình 1: Cấu trúc APK tổ chức kiểm thử Android.

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ử.