Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Initiez-vous aux tests d'instrumentation

Ce guide explique comment préparer et exécuter un test d'instrumentation à l'aide de Firebase Test Lab. Pour utiliser ce guide, vous aurez besoin d' un test d'instrumentation (écrit par vous ou votre équipe) qui utilise les Espresso ou Automator UI 2.0 framework de test Android. Tests d'instrumentation peuvent fonctionner jusqu'à 45 minutes sur les appareils physiques et jusqu'à 60 minutes sur des périphériques virtuels .

Dans les étapes suivantes, vous téléchargerez l'APK de votre application et l'APK de votre test sur Firebase.

(Facultatif) Ajoutez la bibliothèque de captures d'écran à votre application

Firebase Test Lab comprend une bibliothèque (testlab-instr-lib) que vous pouvez utiliser pour traiter toutes les captures d' écran que vous prenez avec de AndroidX ScreenCapture lors de l' exécution des tests d'instrumentation, tels que des tests écrits en utilisant le framework de test Espresso . Cette section décrit comment créer ScreenCapture objets avec la bibliothèque AndroidX et comment les traiter à l' aide testlab-instr-lib.

Une fois votre test d'instrumentation exécuté, vous pouvez afficher les captures d'écran capturées dans la console Firebase.

Essayez un exemple d'application

Télécharger l' exemple d' application NotePad pour essayer cette fonctionnalité. La possibilité de prendre des captures d'écran est déjà intégrée au projet NotePad.

Étape 1. Ajoutez la bibliothèque de captures d'écran à votre projet

  1. Dans votre projet de niveau racine test (niveau du projet) fichier Gradle ( build.gradle ), ajoutez le dépôt Maven de Google à chaque section des dépôts:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. Dans votre module (app-niveau) de fichier Gradle (généralement app/build.gradle ), ajouter une dépendance à la bibliothèque du laboratoire de test.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestCompile `com.google.firebase:testlab-instr-lib:02`
      // ...
    }
  3. Dans votre dossier de test de AndroidManifest.xml, inscrivez -vous le FirebaseScreenCaptureProcessor dans une balise méta-données dans le <instrumentation> élément. Vous pouvez également spécifier le processeur comme un argument en AndroidJUnitRunner à la place (voir la documentation de référence AndroidJUnitRunner pour obtenir des instructions sur la façon).

    <instrumentation
      // Check that you have the following line (if not, add it):
      android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner
      android:targetPackage="com.your.package.name">
    
    // Add the following:
    <meta-data
      android:name="screenCaptureProcessors"
      android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" />
    </instrumentation>
    ...
    
  4. Dans votre fichier de l' application AndroidManifest.xml, ajoutez les lignes suivantes dans le <manifest> élément:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. Dans votre AndroidManifest.xml fichier, spécifier des autorisations de système pour votre application en ajoutant les lignes suivantes dans le <manifest> balise. Si vous testez sur Android 10 (niveau de l' API 29) ou plus, omettre la WRITE_EXTERNAL_STORAGE autorisation (votre application ne nécessite pas cette autorisation pour lire et écrire des captures d' écran à l'appareil).

    <manifest ... >
        <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        ...
    </manifest>

Étape 2. Prenez des captures d'écran pendant votre test

A tout moment dans votre test où vous voulez prendre une capture d' écran, appelez le Screenshot.capture() méthode de la bibliothèque AndroidX. Cela produit un ScreenCapture objet . Lorsque vous appelez process() sur le ScreenCapture objet, il obtient traité à l' aide du ScreenCaptureProcessor qui est enregistré dans votre AndroidManifest.xml . Notez que le BasicScreenCaptureProcessor est utilisé si aucun processeurs sont enregistrés. Depuis que vous avez enregistré la FirebaseScreenCaptureProcessor , vos captures d' écran seront traitées par FirebaseScreenCaptureProcessor et seront disponibles pour vous avec vos résultats lorsque vous exécutez votre test avec Firebase Test Lab.

Exemple de cas d'utilisation pour la création d' un ScreenCapture :

  • Effectuez une capture d'écran complète sur une API Build.VERSION_CODES.JELLY_BEAN_MR2 et supérieure :

    Screenshot.capture()
    
  • Prenez un ScreenCapture de l'activité sur tous les niveaux de l' API. Notez qu'il s'agit de la seule option pour les appareils inférieurs à Build.VERSION_CODES.JELLY_BEAN_MR2.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

Exemples de cas d'utilisation pour le traitement d'un ScreenCapture

  • Traiter un ScreenCapture via le FirebaseScreenCaptureProcessor :

    Screenshot.capture().process();
    
  • Traiter une ScreenCapture via un spécifié ScreenCaptureProcessor (ce qui vous permet de sauter l' enregistrement du processeur):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Définissez le nom et le format du ScreenCapture et de traiter à l'aide du processeur enregistré:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

Étape 3. Construisez et exécutez votre test

  1. Construisez vos APK d'applications et de test (voir Test d' application pour les instructions).

  2. Téléchargez les fichiers APK au tableau de bord Lab Test de la console Firebase.

  3. Enfin, lancez votre test.

Étape 4. Affichez vos captures d'écran de test

Une fois votre test terminé, vous pouvez afficher toutes les captures d'écran prises dans la console Firebase.

  1. Dans l'onglet Tests, sélectionnez votre test terminé, puis cliquez sur l'onglet Résultats.

  2. Sélectionnez à nouveau votre test, puis cliquez sur l'onglet Captures d' écran qui apparaît.

(Facultatif) Activer des fonctionnalités de test supplémentaires

Vous pouvez activer les fonctionnalités suivantes dans votre test avant de l'exécuter avec Test Lab :

Activer l'orchestrateur

Test de Android Orchestrator est un outil qui fonctionne chacun des tests d'instrumentation de votre application indépendamment. Test Lab utilise toujours la dernière version d'Orchestrator.

Pour activer Orchestrator Test Lab, dans la configuration de test d'instrumentation, cliquez sur Options supplémentaires> Exécuter avec Orchestrator.

Avantages et inconvénients

  • Avantage : Pas d'état partagé. Chaque test s'exécute dans sa propre instance d'instrumentation afin qu'un état partagé ne s'accumule pas entre les tests.
  • Avantage : plantages isolés. Si un test plante, seule cette instrumentation est terminée et les autres tests de votre suite peuvent toujours s'exécuter.
  • Inconvénient: runtimes plus. Chaque test exécute sa propre instance d'instrumentation, ce qui signifie que le processus de test prend globalement un peu plus de temps. Si non cochée, l'augmentation des temps de fonctionnement pourraient avoir des répercussions sur votre utilisation ou le temps facturé quota et peut vous amener à frapper de vos appareils limites de temporisation .

Activer le partitionnement

Le sharding de test divise un ensemble de tests en sous-groupes (shards) qui s'exécutent séparément de manière isolée. Test Lab exécute automatiquement chaque partition en parallèle à l'aide de plusieurs appareils et termine l'ensemble des tests en moins de temps.

Comment fonctionne le sharding de test

Supposons que vous créez N fragments. Pour chaque appareil que vous sélectionnez, Test Lab lance N appareils identiques et exécute un sous-ensemble de tests sur chaque appareil. Cela signifie que les cas de test fragmentées peuvent donner lieu à de multiples exécutions de tests par appareil, contrairement à des cas de test non fragmentées, qui aboutissent toujours à une exécution de test par appareil (pour un aperçu rapide des concepts clés de laboratoire de test, voir concepts clés ).

Vous pouvez activer le test de partitionnement dans la console Firebase :

  1. Dans la configuration de test d'instrumentation, cliquez sur Options supplémentaires.

  2. Dans la section Sharding, entrez le nombre de tessons que vous souhaitez exécuter.

Facturation des fragments de test

Test Lab met en œuvre vos tessons en mettant à profit le mécanisme de sharding intégré de AndroidJUnitRunner. Pour éviter d'être facturé pour la rotation de partitions vides (partitions sans cas de test attribués), le nombre de partitions que vous créez doit être inférieur au nombre total de cas de test. En fonction de la durée d'exécution de chaque scénario de test, il est généralement recommandé d'affecter 2 à 10 scénarios de test par partition.

Pour plus d' informations sur la facturation, lisez Utilisation, les quotas et la facturation .