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.6.1' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
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:
- 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ủaAndroidJUnitRunner
. Ở giai đoạn này, 2 quy trình đo lường không thể giao tiếp với nhau. - Mỗi phiên bản
AndroidJUnitRunner
đều đăng ký Espresso làm khung kiểm thử. - 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. - 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:
![](https://developer.android.com/static/images/training/testing/multiprocess_espresso.png?authuser=6&hl=vi)
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.
- Video trong phiên Phát triển theo hướng thử nghiệm trên Android bằng Thư viện hỗ trợ thử nghiệm Android từ Google I/O 2017, bắt đầu lúc 36:41.