Multiprocess Espresso

Khi ứng dụng phát triển, bạn có thể thấy hữu ích khi đặt một số thành phần ứng dụng vào một quy trình khác với quy trình chính của ứng dụng. Để kiểm thử các thành phần ứng dụng trong các quy trình không mặc định này, bạn có thể sử dụng chức năng của Espresso đa quy trình. Công cụ này có trên Android 8.0 (API cấp 26) trở lên, cho phép bạn kiểm thử liền mạch các tương tác trên giao diện người dùng của ứng dụng qua các ranh giới quy trình của ứng dụng, đồng thời vẫn đảm bảo tính đồng bộ hoá của Espresso.

Khi sử dụng Espresso đa quy trình, hãy lưu ý những điều cần cân nhắc về phiên bản và phạm vi sau đây:

  • Ứng dụng của bạn phải nhắm đến Android 8.0 (API cấp 26) trở lên.
  • Công cụ này chỉ có thể kiểm thử các thành phần ứng dụng mà bạn đưa vào các quy trình trong gói của ứng dụng. Thử nghiệm này không thể kiểm thử các quy trình bên ngoài.

Sử dụng công cụ

Để kiểm thử một quy trình trong ứng dụng bằng Multiprocess Espresso, hãy thêm nội dung tham chiếu đến cấu phần phần mềm espresso-remote trong tệp build.gradle của ứng dụng:

app/build.gradle

Groovy

dependencies {
    ...
    androidTestImplementation 'androidx.test.espresso:espresso-remote:3.4.0'
}

Kotlin

dependencies {
    ...
    androidTestImplementation('androidx.test.espresso:espresso-remote:3.4.0')
}

Bạn cũng cần thêm đoạn mã sau vào tệp kê khai androidTest của ứng dụng:

  • Phần tử <instrumentation> xác định quy trình.
  • Phần tử <meta-data> cho biết bạn muốn sử dụng Espresso đa quy trình.

Đoạn mã sau đây cho biết cách thêm các phần tử này:

src/androidTest/AndroidManifest.xml

<manifest ... package="androidx.test.mytestapp.tests">
  <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" />
  <instrumentation
    android:name="androidx.test.runner.AndroidJUnitRunner"
    android:targetPackage="androidx.test.mytestapp"
    android:targetProcesses="*">
    <meta-data
      android:name="remoteMethod"
      android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" />
  </instrumentation>
</manifest>

Đoạn mã trước cho khung Android biết rằng bạn muốn kiểm thử mọi quy trình trong gói của ứng dụng. Nếu chỉ muốn kiểm thử một tập hợp con các quy trình của ứng dụng, bạn có thể chỉ định một danh sách được phân tách bằng dấu phẩy trong phần tử targetProcesses:

<instrumentation
    ...
    android:targetProcesses=
            "androidx.test.mytestapp:myFirstAppProcessToTest,
             androidx.test.mytestapp:mySecondAppProcessToTest" ... />

Tìm hiểu cấu trúc của công cụ này

Khi kiểm thử ứng dụng và khởi chạy quy trình mặc định, bạn có thể thực hiện một hoạt động tương tác trên giao diện người dùng (chẳng hạn như nhấn nút) để bắt đầu một hoạt động trong quy trình phụ. Sau đó, hệ thống sẽ hoàn tất các bước sau đây để bật việc kiểm thử trên nhiều quy trình bằng Espresso:

  1. Khung Android sẽ tạo và bắt đầu một quy trình mới để tuân theo cấu trúc điều hướng của ứng dụng. Mỗi quy trình Instrumentation bao gồm một thực thể mới của AndroidJUnitRunner. Ở giai đoạn này, 2 quy trình đo lường không thể giao tiếp với nhau.
  2. Mỗi phiên bản AndroidJUnitRunner đều đăng ký Espresso làm khung kiểm thử.
  3. 2 thực thể của AndroidJUnitRunner tiến hành bắt tay để thiết lập kết nối với nhau. Đồng thời, mỗi thực thể AndroidJUnitRunner sẽ kết nối mọi ứng dụng đã đăng ký như Espresso với các ứng dụng tương ứng trong các quy trình khác để những ứng dụng này có thể tự tạo thành một kênh giao tiếp trực tiếp.
  4. Mỗi phiên bản AndroidJUnitRunner sẽ tiếp tục tìm kiếm các thực thể đo lường và ứng dụng khách khung kiểm thử mới được thêm vào, thiết lập các kênh giao tiếp bổ sung nếu cần.

Hình 1 minh hoạ kết quả của quá trình này:

Hình 1. Thiết lập hoạt động giao tiếp giữa nhiều quy trình đo lường bằng Espresso đa quy trình

Tài nguyên khác

Để biết thêm thông tin về chủ đề này, hãy tham khảo các tài nguyên sau.