Espresso multiprocessus

Au fur et à mesure que votre application se développe, il peut être utile de placer certains de ses composants au cours d'un processus autre que le processus principal de votre application. Pour tester les composants d'une application processus autres que ceux par défaut, vous pouvez utiliser la fonctionnalité d'Espresso multiprocessus. Disponible sur Android 8.0 (niveau d'API 26) ou version ultérieure, cet outil vous permet de : tester facilement les interactions de l'interface utilisateur de votre application qui s'étendent sur tous les processus de votre application tout en conservant les garanties de synchronisation d'Espresso.

Lorsque vous utilisez Multiprocess Espresso, conservez la gestion des versions et le champ d'application suivants ces considérations à l'esprit:

  • Votre application doit cibler Android 8.0 (niveau d'API 26) ou version ultérieure.
  • L'outil ne peut tester que les composants d'application que vous incluez dans les processus de le package de votre application. Il ne peut pas tester les processus externes.

Utiliser l'outil

Pour tester un processus dans votre application à l'aide d'Espresso multiprocessus, ajoutez une référence. à l'artefact espresso-remote dans le fichier build.gradle de votre application:

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

Vous devez également ajouter les éléments suivants au fichier manifeste androidTest de votre application:

  • Un élément <instrumentation> qui définit le processus.
  • Un élément <meta-data> indiquant que vous souhaitez utiliser Multiprocess Espresso

L'extrait de code suivant montre comment ajouter ces éléments:

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>

L'extrait précédent indique au framework Android que vous souhaitez qu'il teste chaque processus du package de votre application. Si vous souhaitez tester uniquement un sous-ensemble processus de l'application, vous pouvez spécifier une liste d'éléments séparés par une virgule dans les targetProcesses:

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

Comprendre l'architecture de l'outil

Lorsque vous testez votre application et lancez son processus par défaut, vous pouvez exécuter une interface utilisateur interaction (appui sur un bouton, par exemple) qui lance une activité dans un processus. Le système effectue ensuite les étapes suivantes pour activer l'authentification multiprocessus à l'aide d'Espresso:

  1. Le framework Android crée et lance un nouveau processus pour suivre le structure de navigation. Chaque processus Instrumentation inclut une nouvelle instance AndroidJUnitRunner À ce stade, les deux processus d'instrumentation ne peuvent pas communiquer entre eux autre.
  2. Chaque AndroidJUnitRunner enregistre Espresso comme framework de test.
  3. Les 2 instances de AndroidJUnitRunner effectuer un handshake pour établir une connexion entre eux. Similaire temps, chaque AndroidJUnitRunner connecte tous les clients enregistrés comme Espresso à l'aide de leur leurs homologues dans d'autres processus, de sorte que ces clients puissent de communication entre eux.
  4. Chaque AndroidJUnitRunner l'instance continue de rechercher les nouvelles instances d'instrumentation et les tests en établissant des canaux de communication supplémentaires si nécessaire.

La figure 1 illustre le résultat de ce processus:

Figure 1. Établir la communication entre plusieurs d'instrumentation à l'aide de Multiprocess Espresso.

Ressources supplémentaires

Pour plus d'informations à ce sujet, consultez les ressources suivantes.