Espresso multiprocessus

À mesure que votre application se développe, il peut être utile de placer certains de ses composants dans un processus autre que le processus principal de votre application. Pour tester les composants d'application dans ces processus autres que ceux par défaut, vous pouvez utiliser la fonctionnalité d'Espresso multiprocessus. Cet outil, disponible sur Android 8.0 (niveau d'API 26) ou version ultérieure, vous permet de tester facilement les interactions de l'interface utilisateur de votre application qui franchissent les limites de traitement de votre application, tout en conservant les garanties de synchronisation d'Espresso.

Lorsque vous utilisez Espresso multiprocessus, tenez compte des considérations suivantes concernant la gestion des versions et le champ d'application:

  • 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 du package de votre application. Il ne peut pas tester les processus externes.

Utiliser l'outil

Pour tester un processus dans votre application à l'aide de Multiprocess Espresso, 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.4.0'
}

Kotlin

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

Vous devez également ajouter le code suivant au fichier manifeste androidTest de votre application:

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

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 ne souhaitez tester qu'un sous-ensemble des processus de votre application, vous pouvez spécifier une liste d'éléments séparés par une virgule dans l'élément 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 effectuer une interaction avec l'interface utilisateur, par exemple un appui sur un bouton, qui lance une activité dans un processus secondaire. Le système effectue ensuite les étapes suivantes pour activer les tests interprocessus à l'aide d'Espresso:

  1. Le framework Android crée et lance un nouveau processus pour suivre la structure de navigation de votre application. Chaque processus Instrumentation inclut une nouvelle instance de AndroidJUnitRunner. À ce stade, les deux processus d'instrumentation ne peuvent pas communiquer l'un avec l'autre.
  2. Chaque instance AndroidJUnitRunner enregistre Espresso comme framework de test.
  3. Les deux instances de AndroidJUnitRunner effectuent un handshake pour établir une connexion entre elles. En même temps, chaque instance AndroidJUnitRunner connecte tous les clients enregistrés, comme Espresso, à leurs homologues respectifs dans d'autres processus, afin que ces clients puissent former un canal de communication directe entre eux.
  4. Chaque instance AndroidJUnitRunner continue à rechercher des instances d'instrumentation et des clients du framework de test récemment ajoutés, afin d'établir 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 processus d'instrumentation à l'aide d'Espresso multiprocessus

Ressources supplémentaires

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