Ce guide explique comment préparer et exécuter un test d'instrumentation à l'aide de Firebase Test Lab. Pour suivre ce guide, vous aurez besoin d'un test d'instrumentation (écrit par vous ou votre équipe) qui utilise les frameworks de test Android Espresso ou UI Automator. Les tests d'instrumentation peuvent durer jusqu'à 45 minutes sur les appareils physiques et jusqu'à 60 minutes sur les appareils virtuels.
Plus loin dans ce guide, vous allez importer l'APK de votre application et l'APK de votre test dans Firebase.
(Facultatif) Ajouter la bibliothèque de captures d'écran à votre application
Firebase Test Lab inclut une bibliothèque (testlab-instr-lib) que vous pouvez
utiliser pour traiter toutes les captures d'écran que vous effectuez avec ScreenCapture d'AndroidX
lors de l'exécution de tests d'instrumentation, tels que les tests écrits à l'aide du
framework de test Espresso.
Cette section explique comment créer des objets ScreenCapture avec la bibliothèque AndroidX et comment les traiter à l'aide de testlab-instr-lib.
Une fois votre test d'instrumentation exécuté, vous pouvez afficher les captures d'écran dans la Firebase console.
Essayer une application exemple
Téléchargez l'application exemple NotePad pour essayer cette fonctionnalité. La possibilité d'effectuer des captures d'écran est déjà intégrée au projet NotePad.
Étape 1. Ajouter la bibliothèque de captures d'écran à votre projet
Dans le fichier Gradle des paramètres de niveau racine de votre projet de test (
settings.gradle.ktsousettings.gradle), ajoutez le dépôt Maven de Google à chaque sectionrepositories:pluginManagement { repositories { // Add the following line: google() // Google's Maven repository mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { // Add the following line: google() // Google's Maven repository mavenCentral() } } // ...
Dans le fichier Gradle de votre module (au niveau de l'application) (généralement
<project>/<app-module>/build.gradle.ktsou<project>/<app-module>/build.gradle), ajoutez une dépendance pour la bibliothèque de captures d'écran Test Lab.dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2") // ...
Dans le fichier
AndroidManifest.xmlde votre test, enregistrez lesFirebaseScreenCaptureProcessordans une balise de métadonnées au sein de l'élément<instrumentation>. Vous pouvez également spécifier le processeur comme un argument dans AndroidJUnitRunner (pour savoir comment procéder, consultez la documentation de référence AndroidJUnitRunner ).<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> ...Dans le fichier
AndroidManifest.xmlde votre application, ajoutez les lignes suivantes dans l'élément<manifest>:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>Dans votre fichier
AndroidManifest.xml, spécifiez les autorisations système pour votre application en ajoutant les lignes suivantes dans la balise<manifest>. Si vous effectuez des tests sur Android 10 (niveau d'API 29) ou version ultérieure, omettez l'autorisationWRITE_EXTERNAL_STORAGE(votre application n'a pas besoin de cette autorisation pour lire et écrire des captures d'écran sur 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. Effectuer des captures d'écran pendant le test
À tout moment de votre test où vous souhaitez effectuer une capture d'écran, appelez la méthode Screenshot.capture() à partir de la bibliothèque AndroidX. Cela génère un
ScreenCapture objet.
Lorsque vous appelez process() sur l'objet ScreenCapture, il est traité
à l'aide du ScreenCaptureProcessor
enregistré dans votre AndroidManifest.xml. Notez que BasicScreenCaptureProcessor est utilisé si aucun processeur n'est enregistré.
Étant donné que vous avez enregistré FirebaseScreenCaptureProcessor, vos captures d'écran seront
traitées via FirebaseScreenCaptureProcessor et seront disponibles
avec vos résultats lorsque vous exécuterez votre test avec Firebase Test Lab.
Exemples 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 ou version ultérieure :
Screenshot.capture()Effectuez une
ScreenCapturede l'activité à n'importe quel niveau d'API. Notez qu'il s'agit de la seule option pour les appareils dont la version est antérieure à 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'une capture d'écran
Traitez un
ScreenCapturevia leFirebaseScreenCaptureProcessor:Screenshot.capture().process();Traitez un
ScreenCapturevia unScreenCaptureProcessorspécifié (cela vous permet d'éviter d'enregistrer le processeur) :Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);Définissez le nom et le format de la
ScreenCapture, puis traitez-la à l'aide du processeur enregistré :Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
Étape 3. Compiler et exécuter le test
Compilez votre application et testez les APK (pour obtenir des instructions, consultez Tester votre application ).
Dans la console Firebase, accédez à DevOps et engagement > Test Lab, puis importez les fichiers APK.
Enfin, exécutez votre test.
Étape 4. Afficher les captures d'écran de votre test
Une fois votre test terminé, vous pouvez afficher toutes les captures d'écran effectuées :
Dans la console Firebase, accédez à DevOps et engagement > Test Lab.
Dans l'onglet Tests, sélectionnez le test terminé, puis cliquez sur l'onglet Résultats.
Sélectionnez à nouveau votre test, puis cliquez sur l'onglet Captures d'écran qui s'affiche.
(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 Orchestrator
Android Test Orchestrator est un outil qui exécute indépendamment chacun des tests d'instrumentation de votre application. Test Lab utilise toujours la dernière version d'Orchestrator.
Pour activer Orchestrator pour Test Lab, dans la configuration du test d'instrumentation, cliquez sur Options supplémentaires > Exécuter avec Orchestrator.
Lorsque vous utilisez Orchestrator, vous bénéficiez des avantages suivants :
- Aucun état partagé. Chaque test s'exécute dans sa propre instance d'instrumentation. Un état partagé ne s'accumule donc pas entre les tests.
- Plantages isolés. Si un test plante, seule cette instrumentation est arrêtée, et les autres tests de votre suite peuvent toujours s'exécuter.
N'oubliez pas que lorsque vous utilisez Orchestrator, chaque test exécute sa propre instance d'instrumentation, ce qui signifie que le processus de l'application redémarre après chaque scénario de test. L'augmentation des durées d'exécution qui en résulte peut avoir un impact sur votre utilisation du quota ou sur le temps facturé et peut vous amener à dépasser les délais d'inactivité de vos appareils. Si vous réduisez le temps de démarrage de votre application, cette surcharge sera réduite.
Pour définir des options supplémentaires pour Orchestrator, spécifiez-les via
environmentVariables champ. Par exemple, pour utiliser clearPackageData, utilisez cette option dans gcloud :
--environment-variables clearPackageData=true
Activer le sharding
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 shard en parallèle sur plusieurs appareils et effectue l'ensemble des tests en moins de temps.
Par exemple, si vous créez N shards, pour chaque appareil que vous sélectionnez, Test Lab lance N appareils identiques et exécute un sous-ensemble des tests sur chaque appareil. Cela signifie que les scénarios de test fragmentés peuvent entraîner plusieurs exécutions de test par appareil. Toutefois, les scénarios de test non fragmentés entraînent une seule exécution de test par appareil. Pour en savoir plus sur les concepts Test Lab, consultez Concepts clés.
Pour activer le sharding de test dans la console Firebase, procédez comme suit :
Dans la configuration du test d'instrumentation, cliquez sur Options supplémentaires.
Dans la section Sharding, saisissez le nombre de shards que vous souhaitez exécuter.
Facturation des shards de test
Test Lab implémente vos shards en tirant parti du mécanisme de sharding intégré d'AndroidJUnitRunner. Pour éviter d'être facturé pour le lancement de shards vides (shards sans scénarios de test attribués), le nombre de shards que vous créez doit être inférieur au nombre total de scénarios de test. En fonction de la durée d'exécution de chaque scénario de test, il est généralement judicieux d'attribuer entre 2 et 10 scénarios de test par shard.
Pour en savoir plus sur la facturation, consultez Utilisation, quotas et facturation.