Multiprocess Espresso

随着应用规模的扩大,您可能会发现将一些应用组件 应用主进程以外的进程中若要在这些环境下测试应用组件 非默认进程,则可以使用 Multiprocess Espresso 的功能。 此工具在 Android 8.0(API 级别 26)及更高版本中提供,可让您执行以下操作: 无缝测试应用跨应用进程的界面交互 边界,同时保持 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.6.1'
}

Kotlin

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

您还需要将以下内容添加到应用的 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 框架指明您希望让它测试 应用软件包中的每个进程如果您只想测试 应用进程内,可以指定一个逗号分隔列表, targetProcesses 元素:

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

了解该工具的架构

当您测试应用并启动其默认进程时,您可能需要执行一个界面, 在辅助组件中启动 activity 的任何互动(例如按下按钮) 过程。然后,系统完成以下步骤以启用跨进程 使用 Espresso 进行测试:

  1. Android 框架创建并启动一个新进程来遵循您的应用 导航结构。每个 Instrumentation 进程 包含 AndroidJUnitRunner。 在此阶段,2 个插桩进程无法与每个插桩进程通信 其他。
  2. 每个 AndroidJUnitRunner 实例将 Espresso 注册为其测试框架。
  3. 两个实例 AndroidJUnitRunner 执行握手,以在彼此之间建立连接。不变 每个 AndroidJUnitRunner 实例会将所有注册的客户端(如 Espresso)与各自的 其他流程中的副本,以便这些客户端能够直接 相互通信的桥梁。
  4. 每个AndroidJUnitRunner 继续查找新添加的插桩测试实例并 框架客户端,根据需要建立其他沟通渠道。

图 1 说明了此过程的结果:

图 1. 在多台设备之间建立通信 使用 Multiprocess Espresso 进行插桩测试

其他资源

如需详细了解本主题,请参阅以下资源。