Multiprozess-Espresso

Wenn Ihre App wächst, kann es nützlich sein, einige App-Komponenten in einem anderen Prozess als dem Hauptprozess Ihrer App. Zum Testen von App-Komponenten in diesen nicht standardmäßige Prozesse verwenden, können Sie die Funktion von Multiprocess Espresso nutzen. Mit diesem Tool, das ab Android 8.0 (API-Level 26) verfügbar ist, kannst du nahtlos die Interaktionen mit der Benutzeroberfläche Ihrer App testen, die den Prozess der App durchlaufen unter Einhaltung der Synchronisierungsgarantien von Espresso.

Behalten Sie bei Verwendung von Multiprocess Espresso die folgende Versionierung und den folgenden Bereich bei. Überlegungen:

  • Deine App muss auf Android 8.0 (API-Level 26) oder höher ausgerichtet sein.
  • Das Tool kann nur App-Komponenten testen, die Sie in Prozesse innerhalb Ihres App-Pakets. Sie können damit keine externen Prozesse testen.

Tool verwenden

Fügen Sie eine Referenz hinzu, um einen Prozess in Ihrer App mit Multiprocess Espresso zu testen dem Artefakt espresso-remote in der Datei build.gradle Ihrer App:

app/build.gradle

Cool

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

Kotlin

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

Außerdem musst du dem androidTest-Manifest deiner App Folgendes hinzufügen:

  • Ein <instrumentation>-Element, das den Prozess definiert.
  • Ein <meta-data>-Element, das angibt, dass Sie Multiprocess Espresso verwenden möchten.

Im folgenden Code-Snippet sehen Sie, wie diese Elemente hinzugefügt werden:

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>

Mit dem vorherigen Snippet wird das Android-Framework angegeben, das getestet werden soll. im Paket Ihrer App an. Wenn Sie nur eine Teilmenge Ihrer Daten testen möchten, App-Prozessen verwenden, können Sie eine durch Kommas getrennte Liste im Stattdessen targetProcesses-Element:

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

Die Architektur des Tools verstehen

Wenn Sie Ihre Anwendung testen und den Standardprozess starten, führen Sie möglicherweise eine UI aus Interaktion, z. B. das Drücken einer Schaltfläche, die eine Aktivität in einem sekundären . Das System führt dann die folgenden Schritte aus, um prozessübergreifende Tests mit Espresso:

  1. Das Android-Framework erstellt und startet einen neuen Prozess, um die Navigationsstruktur. Jeder Instrumentation-Prozess enthält eine neue Instanz von AndroidJUnitRunner In dieser Phase können die beiden Instrumentierungsprozesse nicht miteinander kommunizieren. Sonstiges.
  2. Jedes AndroidJUnitRunner -Instanz registriert Espresso als ihr Test-Framework.
  3. Die beiden Instanzen von AndroidJUnitRunner und führen einen Handshake aus, um eine Verbindung miteinander herzustellen. Gleichzeitig Mal, jeweils AndroidJUnitRunner verbindet alle registrierten Clients wie Espresso mit ihrem jeweiligen Kollegen in anderen Prozessen, sodass diese Kundschaft Kommunikationskanal untereinander.
  4. Jedes AndroidJUnitRunner sucht weiter nach neu hinzugefügten Instrumentierungsinstanzen und Tests Framework-Kunden und bei Bedarf zusätzliche Kommunikationskanäle einrichten.

Abbildung 1 veranschaulicht das Ergebnis dieses Vorgangs:

<ph type="x-smartling-placeholder">
</ph>
Abbildung 1: Herstellung von Kommunikation zwischen mehreren Instrumentierungsprozesse mit Multiprocess Espresso

Weitere Informationen

Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen.