隨著應用程式業務拓展,您可能會發現將部分應用程式元件放在應用程式主要程序以外的程序中,如要測試這些非預設程序中的應用程式元件,您可以使用 Multiprocess Espresso 的功能。這項工具適用於 Android 8.0 (API 級別 26) 以上版本,可讓您在跨應用程式的程序界線內,順暢地測試應用程式的 UI 互動,同時維持 Espresso 的同步處理保證。
使用 Multiprocess Espresso 時,請留意下列版本管理和範圍注意事項:
- 您的應用程式必須指定 Android 8.0 (API 級別 26) 以上版本。
- 這項工具只能測試您納入應用程式套件中程序的應用程式元件。無法測試外部程序。
使用工具
如要使用 Multiprocess Espresso 在應用程式中測試程序,請在應用程式的 build.gradle
檔案中新增 espresso-remote 構件的參考資料:
Groovy
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.4.0' }
Kotlin
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.4.0') }
您還需要將以下內容加入應用程式的 androidTest
資訊清單:
- 定義程序的
<instrumentation>
元素。 - 指出要使用 Multiprocess Espresso 的
<meta-data>
元素。
以下程式碼片段說明如何新增這些元素:
<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>
先前的程式碼片段向 Android 架構表明,您想讓 Android 架構測試應用程式套件中的所有程序。如果只想測試部分應用程式程序,您可以改為在 targetProcesses
元素中指定以半形逗號分隔的清單:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
瞭解工具架構
測試應用程式並啟動其預設程序時,您可以執行 UI 互動 (例如按下按鈕),以便在次要程序中啟動活動。接著,系統會完成下列步驟,使用 Espresso 啟用跨程序測試功能:
- Android 架構會建立並啟動新程序,以遵循應用程式的導覽結構。每個
Instrumentation
程序都包含新的AndroidJUnitRunner
執行個體。在這個階段,2 個檢測程序無法相互通訊。 - 每個
AndroidJUnitRunner
執行個體都會註冊 Espresso 做為測試架構。 AndroidJUnitRunner
的 2 個執行個體會執行握手來建立彼此的連線。同時,每個AndroidJUnitRunner
執行個體都會將所有已註冊的用戶端 (例如 Espresso) 連結至其他程序中的個別對應項目,讓這些用戶端可以在各自之間建立直接通訊管道。- 每個
AndroidJUnitRunner
執行個體會持續尋找新增的檢測執行個體和測試架構用戶端,並視需要建立其他通訊管道。
圖 1 說明這項程序的結果:
其他資源
如要進一步瞭解這個主題,請參閱下列資源。
- 「使用 Android 測試支援資料庫在 Android 上進行測試開發」研討會影片,自 2017 年 Google I/O 大會發布,影片從 36:41 開始。