Khi ứng dụng của bạn phát triển, bạn có thể thấy việc đặt một số thành phần ứng dụng vào một quy trình khác ngoài quy trình chính của ứng dụng là hữu ích. Để 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 Multiprocess Espresso. 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 hoạt động tương tác trên giao diện người dùng của ứng dụng vượt qua ranh giới quy trình của ứng dụng trong khi vẫn duy trì các đảm bảo đồng bộ hoá của Espresso.
Khi sử dụng Espresso đa tiến trình, hãy lưu ý những điểm cân nhắc sau về việc lập phiên bản và phạm vi:
- Ứ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 ứng dụng. 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 một 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 nội dung sau vào tệp kê khai androidTest
của ứng dụng:
- Một phần tử
<instrumentation>
xác định quy trình. - Một phần tử
<meta-data>
cho biết rằng bạn muốn sử dụng Espresso đa tiến 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 biết cho khung Android rằng bạn muốn khung này 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 nhóm nhỏ 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ụ
Khi kiểm thử ứng dụng và khởi chạy quy trình mặc định của ứng dụng, bạn có thể thực hiện một hoạt động tương tác với 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 để bật tính năng kiểm thử trên nhiều quy trình bằng Espresso:
- Android Framework 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
đều có một phiên bản 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
sẽ đăng ký Espresso làm khung kiểm thử. - 2 phiên bản
AndroidJUnitRunner
thực hiện một cái bắt tay để thiết lập kết nối với nhau. Đồng thời, mỗi phiên bảnAndroidJUnitRunner
sẽ kết nối tất cả các ứng dụng đã đăng ký (chẳng hạn như Espresso) với các ứng dụng tương ứng trong các quy trình khác để các ứng dụng này có thể tạo thành một kênh liên lạc trực tiếp giữa chúng. - Mỗi phiên bản
AndroidJUnitRunner
đều tiếp tục tìm kiếm các phiên bản đo lường và kiểm thử khung mới được thêm vào, thiết lập các kênh liên lạc bổ sung khi cần.
Hình 1 minh hoạ kết quả của quy trình này:

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 hội thảo Phát triển dựa trên thử nghiệm trên Android bằng Thư viện hỗ trợ kiểm thử Android tại Google I/O 2017, bắt đầu từ 36:41.