1. Introduction
Dernière mise à jour:07/04/2022
Exécuter des tests mobiles avec des systèmes CI/CD
L'exécution de tests mobiles peut être difficile : de nombreuses applications s'exécutent sur différentes plates-formes, appareils et versions d'API. Les développeurs d'applications souhaitent effectuer des tests sur autant de configurations que possible pour détecter les problèmes avant leurs utilisateurs. Toutefois, les contraintes de coût et de ressources limitent le nombre d'appareils de test et la quantité de maintenance manuelle dans laquelle les développeurs individuels peuvent investir. Lorsque le processus de développement s'étend, en particulier pour les systèmes d'intégration et de livraison continues (CI/CD), le processus de test doit être automatisé tout en minimisant les coûts et les efforts de maintenance.
Pour vous aider à comprendre les performances de vos applications sur les appareils de vos utilisateurs, Firebase Test Lab héberge une gamme d'appareils mobiles physiques et virtuels dans nos centres de données. Nous proposons également la Google Cloud CLI, un outil de ligne de commande indépendant de la plate-forme qui orchestre l'exécution de tests sur les appareils de nos centres de données. La gcloud CLI facilite l'intégration de la solution de test dans le cloud de Test Lab dans les workflows CI/CD existants.
Une compatibilité multiplate-forme
Test Lab fournit des solutions de test pour les applications Android et iOS, ainsi qu'une assistance spécialisée pour les jeux mobiles tels qu'Unity. Les options de test couvrent des frameworks de test populaires tels qu'Android Espresso, UI Automator et iOS XCTest. Grâce à Robo, notre robot d'exploration automatisé, Test Lab peut même exécuter des tests sans code.
Aucune configuration matérielle requise
Test Lab héberge des appareils physiques dans les centres de données Google et des appareils virtuels dans Google Cloud. Il vous suffit d'envoyer vos tests à Test Lab et d'attendre les résultats.
Rapidité et fiabilité
L'exécution de nombreux scénarios de test simultanés peut prendre beaucoup de temps et bloquer les processus CI/CD. Avec Test Lab, vous pouvez facilement segmenter les tests et les exécuter sur plusieurs appareils en parallèle. Vous pouvez également détecter les fragilités, une difficulté courante lors des tests sur mobile.
Points abordés
- Créer des artefacts de test
- Exécuter un test mobile à l'aide de la gcloud CLI
- Configurer la CI Jenkins
- Exécuter des tests mobiles à l'aide de la CI Jenkins
- Configurer des tests pour les faire évoluer avec des systèmes CI
Cet atelier de programmation est consacré à l'exécution de tests. Les concepts et les blocs de codes non pertinents ne sont pas abordés, et vous sont fournis afin que vous puissiez simplement les copier et les coller.
Prérequis
Si vous préférez créer des éléments à partir de zéro, vous avez besoin d'Android Studio pour exécuter un test Android ou de Xcode pour exécuter un test iOS. Vous pouvez également simplement vous présenter, et nous vous fournirons les artefacts.
2. Exécuter un test avec la gcloud CLI
Créer un APK d'application Android et un APK de test
Pour exécuter un test avec Test Lab, commencez par créer un APK d'application Android et un APK de test, qui contient des tests d'instrumentation à exécuter sur des appareils physiques ou des émulateurs. Si vous disposez déjà d'un codebase fonctionnel, vous pouvez créer vos propres APK ou utiliser l'exemple de base pour Espresso.
Pour compiler des APK à l'aide des commandes Gradle, vous devez installer le SDK Android. Si Android Studio n'est pas installé sur votre ordinateur, installez Android Studio et le SDK Android, puis définissez l'environnement ANDROID_HOME
avec votre répertoire de SDK Android. Par exemple, dans votre fichier ~/.bash_profile
, ajoutez la ligne suivante :
export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk # For MacOS
Exécutez ensuite les commandes suivantes pour cloner le code et compiler des APK:
git clone https://github.com/android/testing-samples.git cd testing-samples/ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Après avoir exécuté les commandes de clonage et de compilation, vous trouverez l'APK de l'application et l'APK de test aux emplacements suivants :
app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Vous pouvez également utiliser les options suivantes pour obtenir les APK de test et d'application :
- Pour compiler des APK dans Android Studio, suivez les instructions de la section Tester dans Android Studio.
- Téléchargez l'exemple d'application Bloc-notes. Utilisez le fichier binaire
app-debug-unaligned.apk
et le fichier de test d'instrumentationapp-debug-test-unaligned.apk
, qui se trouvent dansNotePad/app/build/outputs/apk/
.
Si vous disposez du code source fonctionnel d'une application iOS, vous pouvez écrire un XCTest, puis créer un fichier ZIP à partir de l'application et des tests.
Utiliser la gcloud CLI pour exécuter un test avec Test Lab
Dans cette section, vous allez créer un projet Firebase et configurer votre environnement SDK Google Cloud local. Pour en savoir plus, consultez Commencer à tester avec gcloud CLI.
Configurer gcloud CLI
- Téléchargez le SDK Google Cloud, qui inclut l'outil gcloud CLI.
- Vérifiez que votre installation est à jour:
gcloud components update
- Connectez-vous à la gcloud CLI à l'aide de votre compte Google :
gcloud auth login
- Définissez votre projet Firebase dans la CLI gcloud, où
PROJECT_ID
est l'ID de votre projet Firebase. Vous trouverez l'ID du projet dans l'URL de la console Firebase, qui suit cette convention de dénomination :https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID
Si vous ne possédez pas de projet Firebase, créez-en un dans la console Firebase.
Exécuter un test à l'aide des APK compilés
Dans cette section, vous allez exécuter un test d'instrumentation sur l'appareil par défaut de Test Lab, qui est un Pixel 3 avec le niveau d'API 28. Si vous souhaitez utiliser un autre appareil, consultez la liste des appareils disponibles.
À l'aide de l'application et des APK de test que vous avez créés dans Créer un APK d'application Android et un APK de test, exécutez un test d'instrumentation Android à l'aide de la commande suivante :
gcloud firebase test android run \ --type instrumentation \ --app app/build/outputs/apk/debug/app-debug.apk \ --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Analyser les résultats du test
Vous pouvez analyser les résultats du test en utilisant l'une des options suivantes:
gcloud
summary : à la fin de votre test, la CLI gcloud imprime un résumé de base de vos résultats de test.gcloud
code de sortie : une fois le test terminé, la commande se termine avec 0 si le test a réussi. Si le test échoue, la commande se termine avec un code de sortie différent de zéro.- Console Firebase : la gcloud CLI affiche un lien vers la console Firebase. Le lien respecte la convention d'attribution de noms
https://console.firebase.google.com/project/PROJECT_ID/testlab/...
. Pour en savoir plus, consultez Interpréter les résultats d'une exécution de test unique. - Fichier XML JUnit : la gcloud CLI affiche les éléments suivants :
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]
test-lab-xxxxx/xxxxx
est le bucket Cloud Storage qui stocke les artefacts et les résultats des tests. Pour localiser le fichier XML JUnit contenant les résultats du test, ouvrez le lien et accédez à blueline-28-en-portrait/test_result_1.xml
.
3. Configurer avec Jenkins CI
Dans cette section, vous allez utiliser Jenkins CI, un système de CI populaire, pour exécuter des tests avec Test Lab. Si vous souhaitez utiliser un autre système de CI, consultez les bonnes pratiques avancées pour exécuter de grandes suites de tests et la documentation d'autres systèmes de CI tels que Bitrise et Circle CI. Vous pouvez utiliser Flank comme alternative à la gcloud CLI.
Activer la gcloud CLI pour Jenkins
Avant de pouvoir utiliser Test Lab avec Jenkins, vous devez activer les API requises et configurer un compte de service que Jenkins peut utiliser pour s'authentifier auprès de la CLI gcloud.
Ajouter un compte de service Google Cloud pour Jenkins
Les comptes de service sont des comptes limités destinés à des intégrations de services. Ces comptes offrent un contrôle précis pour des services spécifiques et ne sont pas soumis à des vérifications antispam ni à des requêtes de captcha, qui pourraient bloquer vos builds de CI.
Pour créer un compte de service, procédez comme suit :
- Ouvrez la page Comptes de service dans la console Google Cloud.
- Cliquez sur Créer un compte de service, ajoutez un nom et une description, puis cliquez sur Créer et continuer.
- Dans le menu déroulant Sélectionnez un rôle, sélectionnez Basique, puis Éditeur.
- Cliquez sur Continue (Continuer), puis sur Done (OK).
Ensuite, vous allez créer et télécharger une clé d'authentification que Jenkins pourra utiliser pour s'authentifier en tant que compte de service que vous avez créé.
Pour créer et télécharger la clé de compte de service, procédez comme suit:
- Sur la page Comptes de service de la console Google Cloud, cliquez sur l'adresse e-mail associée au compte que vous avez créé.
- Sélectionnez Clés, puis cliquez sur Ajouter une clé et Créer une clé.
- Sélectionnez JSON, puis cliquez sur Créer.
- Lorsque vous êtes invité à télécharger le fichier, cliquez sur OK. Téléchargez le fichier et placez-le en lieu sûr sur votre ordinateur. Vous aurez besoin de ce fichier ultérieurement pour configurer Jenkins.
Pour en savoir plus sur la création de comptes de service, consultez la page Créer un compte de service.
Activer les API Google Cloud requises
L'API Cloud Testing vous permet d'exécuter des tests sur l'infrastructure Google. Vous avez activé cette API lorsque vous avez exécuté un test avec la gcloud CLI. L'API Cloud Tool Results vous permet d'accéder de manière automatisée aux résultats de vos tests.
- Ouvrez la bibliothèque d'API de la Google Developers Console.
- Dans la barre de recherche en haut de la console Firebase, saisissez le nom de chaque API requise (API Cloud Testing et API Cloud Tool Results). La page de présentation de l'API demandée s'affiche.
- Cliquez sur Activer l'API sur la page de présentation de chaque API.
Installer et configurer Jenkins
Vous pouvez installer et configurer la CI Jenkins sur Linux, macOS, Windows et de nombreux autres environnements. Certains détails de cet atelier de programmation sont spécifiques à l'installation et à l'exécution de la CI Jenkins sous Linux, y compris l'utilisation de barres obliques (/) dans les chemins d'accès aux fichiers.
Pour télécharger et installer Jenkins sur un ordinateur exécutant Linux ou Windows, suivez les instructions d'installation de Jenkins. Après avoir installé Jenkins, suivez les mêmes instructions d'installation pour terminer la configuration et accéder au tableau de bord Jenkins à l'aide de http://localhost:8080.
Vérifier les plug-ins installés
Jenkins est compatible avec différents systèmes de contrôle des versions. Dans cet atelier de programmation, vous allez utiliser Git pour exécuter le test précédent. Pour une meilleure expérience d'exécution de la gcloud CLI, vous devez installer le plug-in du SDK GCloud.
- Dans le tableau de bord Jenkins, cliquez sur Manage Jenkins (Gérer Jenkins), puis sur Manage Plugins (Gérer les plug-ins).
- Recherchez les plug-ins Git et SDK gcloud, et installez-les (s'ils ne sont pas encore installés).
Configurer l'emplacement de vos SDK Android et Google Cloud
Vous allez maintenant indiquer à Jenkins où trouver Google Cloud SDK et Android SDK.
Pour configurer les SDK Google Cloud et Android pour Jenkins, procédez comme suit:
- Dans le tableau de bord Jenkins, cliquez sur Manage Jenkins (Gérer Jenkins), puis sur Global Tool Configuration (Configuration globale de l'outil).
- Dans la section SDK Google Cloud, cliquez sur Ajouter le SDK Google Cloud.
- Dans le champ Nom, saisissez pour l'instance Google Cloud SDK un nom facile à mémoriser, par exemple "GCloud-SDK".
- Saisissez votre répertoire d'accueil Google Cloud SDK, par exemple,
/opt/google-cloud-sdk
. - Cliquez sur Enregistrer.
- Configurez vos propriétés système pour les SDK Android et Google Cloud en ouvrant Dashboard > Manage Jenkins > Configure System (Tableau de bord > Gérer Jenkins > Configurer le système).
- Cochez la case Variables d'environnement, puis cliquez sur Ajouter.
- Dans le champ Name (Nom), saisissez ANDROID_HOME. Dans le champ Valeur, saisissez l'emplacement de votre SDK Android (par exemple,
/opt/Android/Sdk
). - Cochez la case Emplacements de l'outil, puis cliquez sur Ajouter. Dans le menu déroulant Nom, sélectionnez le nom de l'instance Google Cloud SDK que vous avez ajoutée dans "Global Tool Configuration" (Configuration de l'outil global).
- Dans le champ Home (Accueil), saisissez l'emplacement de votre SDK Google Cloud (par exemple,
/opt/google-cloud-sdk
). - Cliquez sur Enregistrer.
Ajouter les identifiants de votre compte de service à Jenkins
Vous allez maintenant ajouter les identifiants de votre compte de service gcloud CLI à Jenkins afin qu'il puisse s'authentifier et exécuter correctement les commandes gcloud CLI.
- Dans le tableau de bord Jenkins, cliquez sur Manage Jenkins (Gérer Jenkins), puis sur Manage Credentials (Gérer les identifiants).
- Dans la section Stores scoped to Jenkins (Plates-formes de téléchargement limitées à Jenkins), cliquez sur le lien de domaine (global), puis sur Add Credentials (Ajouter des identifiants).
- Dans le menu déroulant Kind (Genre), sélectionnez Google Service Account from private key (Compte de service Google à partir d'une clé privée).
- Dans le champ Project Name (Nom du projet), saisissez le nom de votre projet Firebase.
- Sélectionnez Clé JSON, puis cliquez sur Parcourir et accédez à l'emplacement où vous avez enregistré la clé de votre compte de service.
- Cliquez sur Créer.
Vous êtes maintenant prêt à configurer votre build automatisé Jenkins pour Test Lab.
4. Exécuter des tests Test Lab avec l'intégration continue Jenkins
Maintenant que vous avez configuré Jenkins, assemblons tout cela et exécutons le même test à l'aide de Jenkins.
Vous pouvez configurer Jenkins pour qu'il exécute des builds automatisés et des tests chaque fois que des mises à jour de votre application sont enregistrées. Vous pouvez également configurer Jenkins pour qu'il exécute des compilations régulièrement. Pour en savoir plus sur la configuration des builds dans Jenkins, consultez Configurer des builds automatiques.
Créer et configurer votre projet Jenkins
Créez un projet pour exécuter des tests d'intégration continue de votre application avec Test Lab.
Créer un projet Jenkins
- Ouvrez le tableau de bord Jenkins en accédant à http://localhost:8080.
- Dans le tableau de bord Jenkins, cliquez sur New Item (Nouvel élément).
- Nommez votre projet dans le champ Item name (Nom de l'élément), puis cliquez sur Freestyle project (Projet Freestyle) pour créer un projet qui utilise une seule configuration de compilation.
- Cliquez sur OK. Pour terminer les configurations de projet, complétez les sections restantes dans l'ordre.
Configurer la gestion du code source
- Dans l'onglet Source Code Management (Gestion du code source), sélectionnez Git.
- Saisissez https://github.com/android/testing-samples.git dans le champ URL du dépôt.
Configurer l'environnement de compilation
La section "Environnement de compilation" vous permet de configurer les caractéristiques de compilation. Activez l'authentification Google Cloud en procédant comme suit:
- Dans l'onglet Build Environment (Environnement de compilation), cochez la case GCloud SDK authentication (Authentification du SDK GCloud) et sélectionnez le nom d'installation que vous avez choisi lorsque vous avez ajouté vos informations d'installation Google Cloud.
- Dans le menu déroulant Google Credentials (Identifiants Google), sélectionnez les identifiants du compte de service que vous avez configurés.
Ajouter des étapes de compilation Gradle pour recompiler des packages APK
- Faites défiler la page jusqu'à la section Build (Compilation), cliquez sur Add build step (Ajouter une étape de compilation), puis sélectionnez Execute shell (Exécuter un shell).
- Ajoutez une étape de compilation pour exécuter les commandes suivantes dans le répertoire principal de votre application:
cd ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Ajouter une étape de compilation gcloud CLI à Jenkins
Vous pouvez maintenant ajouter une étape de compilation à Jenkins pour exécuter Test Lab à l'aide de la ligne de commande gcloud CLI.
Pour ajouter l'étape de compilation de la gcloud CLI, ajoutez une étape de compilation Execute shell (Exécuter l'interface système) et saisissez la commande suivante:
gcloud config set project PROJECT_ID gcloud firebase test android run \ --app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk --test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Une fois la configuration du projet terminée, faites défiler la page jusqu'en bas et enregistrez la configuration. Vous êtes redirigé vers la page d'accueil du nouveau projet.
Exécuter des tests avec Jenkins
Vous êtes maintenant prêt à créer le projet Jenkins et à exécuter un test semblable au test manuel que vous avez effectué avec la gcloud CLI.
Pour exécuter des tests avec Jenkins, procédez comme suit :
- Pour déclencher la compilation manuellement, cliquez sur Build Now (Compiler maintenant).
- Vérifiez la progression et les résultats en cliquant sur le nouveau build > Console Output (Résultat de la console).
Si aucune erreur ne s'affiche, félicitations ! Vous venez de configurer un projet et d'exécuter un test sur un appareil Pixel 2 en un seul clic. Si vous rencontrez des erreurs, consultez la section Dépannage.
5. Bonnes pratiques avancées pour l'exécution de grands ensembles de tests
Lorsque vous souhaitez exécuter de nombreux tests simultanés, suivez ces bonnes pratiques pour vous assurer qu'ils s'exécutent rapidement et de manière fiable.
Améliorer la couverture sur plusieurs configurations d'appareils
Vous pouvez facilement ajouter plusieurs appareils à l'étape de compilation de la gcloud CLI. Vous pouvez également vérifier et sélectionner les appareils, versions, paramètres régionaux et orientations disponibles. Par exemple, la commande suivante exécute des tests sur deux appareils :
- Un Google Pixel 2 virtuel avec le niveau d'API 30 en mode portrait et avec les paramètres régionaux en anglais
- Un Samsung Galaxy S20 physique avec le niveau d'API 29 en mode paysage et la langue française
gcloud firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --device model=Pixel2,version=30,locale=en,orientation=portrait \ --device model=x1q,version=29,locale=fr,orientation=landscape
Utiliser un fichier de configuration YAML de la gcloud CLI
Si vous préférez gérer vos arguments au même endroit ou avec votre système de contrôle des sources, vous pouvez les spécifier dans un fichier d'arguments au format YAML. Pour apprendre à utiliser cette fonctionnalité, exécutez gcloud topic arg-files
.
Segmenter les tests à exécuter en parallèle
Le fractionnement de test divise un ensemble de tests en sous-groupes (fractionnements) qui s'exécutent séparément et de manière isolée. Test Lab exécute automatiquement chaque fragment en parallèle à l'aide de plusieurs appareils, ce qui lui permet de terminer l'ensemble des tests plus rapidement. Pour en savoir plus, consultez la section Activer la segmentation.
Pour activer le fractionnement, utilisez le canal gcloud beta
et ajoutez l'option –num-uniform-shards ou –test-targets-for-shard à l'étape de compilation de la gcloud CLI. Par exemple, pour segmenter vos tests en cinq exécutions et les exécuter en parallèle, exécutez les commandes suivantes:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-uniform-shards 5
Activer la détection des erreurs aléatoires
Les tests sur mobile peuvent souvent être irréguliers. Parfois, les tests réussissent, et parfois ils échouent, même avec la même configuration. Vous pouvez détecter si un test a échoué à l'aide de l'indicateur gcloud CLI –num-flaky-test-attempts. Cette option spécifie le nombre de tentatives d'exécution d'un test si un ou plusieurs scénarios de test échouent pour une raison quelconque.
Par exemple, pour réexécuter trois scénarios de test ayant échoué encore trois fois après l'échec initial, spécifiez les éléments suivants:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-flaky-test-attempts 3
6. Félicitations
Félicitations, vous avez réussi votre premier test Test Lab avec un système CI.
Vous avez créé des APK d'application et de test, et vous avez exécuté un test d'instrumentation avec Test Lab à l'aide de la gcloud CLI. Vous allez également configurer un projet Jenkins pour automatiser ce même test.
Vous savez maintenant quelles sont les étapes clés pour intégrer Test Lab à votre système CI/CD.
Étape suivante
Consultez Configurer l'intégration continue à l'aide de la suite d'émulateurs Firebase.
Documentation complémentaire
- Commencer à effectuer des tests avec des systèmes CI | Documentation Firebase
- Commencer à tester avec la gcloud CLI | Documentation Firebase