多重處理程序 Espresso

隨著應用程式業務拓展,您可能會發現將部分應用程式元件放在應用程式主要程序以外的程序中,如要測試這些非預設程序中的應用程式元件,您可以使用 Multiprocess Espresso 的功能。這項工具適用於 Android 8.0 (API 級別 26) 以上版本,可讓您在跨應用程式的程序界線內,順暢地測試應用程式的 UI 互動,同時維持 Espresso 的同步處理保證。

使用 Multiprocess Espresso 時,請留意下列版本管理和範圍注意事項:

  • 您的應用程式必須指定 Android 8.0 (API 級別 26) 以上版本。
  • 這項工具只能測試您納入應用程式套件中程序的應用程式元件。無法測試外部程序。

使用工具

如要使用 Multiprocess Espresso 在應用程式中測試程序,請在應用程式的 build.gradle 檔案中新增 espresso-remote 構件的參考資料:

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')
}

您還需要將以下內容加入應用程式的 androidTest 資訊清單:

  • 定義程序的 <instrumentation> 元素。
  • 指出要使用 Multiprocess Espresso 的 <meta-data> 元素。

以下程式碼片段說明如何新增這些元素:

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>

先前的程式碼片段向 Android 架構表明,您想讓 Android 架構測試應用程式套件中的所有程序。如果只想測試部分應用程式程序,您可以改為在 targetProcesses 元素中指定以半形逗號分隔的清單:

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

瞭解工具架構

測試應用程式並啟動其預設程序時,您可以執行 UI 互動 (例如按下按鈕),以便在次要程序中啟動活動。接著,系統會完成下列步驟,使用 Espresso 啟用跨程序測試功能:

  1. Android 架構會建立並啟動新程序,以遵循應用程式的導覽結構。每個 Instrumentation 程序都包含新的 AndroidJUnitRunner 執行個體。在這個階段,2 個檢測程序無法相互通訊。
  2. 每個 AndroidJUnitRunner 執行個體都會註冊 Espresso 做為測試架構。
  3. AndroidJUnitRunner 的 2 個執行個體會執行握手來建立彼此的連線。同時,每個 AndroidJUnitRunner 執行個體都會將所有已註冊的用戶端 (例如 Espresso) 連結至其他程序中的個別對應項目,讓這些用戶端可以在各自之間建立直接通訊管道。
  4. 每個 AndroidJUnitRunner 執行個體會持續尋找新增的檢測執行個體和測試架構用戶端,並視需要建立其他通訊管道。

圖 1 說明這項程序的結果:

圖 1. 使用 Multiprocess Espresso 建立多個檢測程序之間的通訊

其他資源

如要進一步瞭解這個主題,請參閱下列資源。