Intégrer Test Lab à votre système CI/CD

1. Introduction

Dernière mise à jour : 07/04/2022

Exécuter des tests mobiles avec des systèmes CI/CD

Il peut être difficile d'exécuter des tests mobiles : de nombreuses applications fonctionnent sur différentes plates-formes, différents appareils et différentes versions d'API. Les développeurs d'applications souhaitent effectuer des tests sur le plus grand nombre de configurations possible afin de détecter les problèmes avant leurs utilisateurs. Toutefois, les contraintes de coûts et de ressources limitent le nombre d'appareils de test et la quantité de maintenance manuelle que les développeurs individuels peuvent investir. Lorsque le processus de développement est étendu, 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 fournissons également la Google Cloud CLI, un outil de ligne de commande indépendant de la plate-forme qui orchestre l'exécution des tests sur les appareils de nos centres de données. L'interface de ligne de commande gcloud facilite l'intégration de la solution de test basée sur le cloud de Test Lab aux 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 comme Unity. Les options de test couvrent les frameworks de test populaires tels qu'Android Espresso, UI Automator et iOS XCTest. Grâce à notre robot d'exploration automatisé Robo, Test Lab peut même exécuter des tests sans aucun code de test.

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. Test Lab vous permet de partitionner facilement les tests et de les exécuter en parallèle sur plusieurs appareils. Vous pouvez également détecter l'instabilité, un problème courant des tests mobiles.

Points abordés

  • Créer des artefacts de test
  • Exécuter un test mobile à l'aide de la CLI gcloud
  • Configurer Jenkins CI
  • Exécuter des tests mobiles à l'aide de Jenkins CI
  • Configurer des tests pour évoluer avec les systèmes CI

Cet atelier de programmation porte sur 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 tout créer à 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. Ou venez simplement avec vous-même 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 instrumentés à exécuter sur des appareils ou des émulateurs. Si vous disposez déjà d'une base de code fonctionnelle, vous pouvez créer vos propres APK ou utiliser BasicSample pour Espresso.

Pour compiler des APK à l'aide de 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 SDK Android. Par exemple, ajoutez la ligne suivante à votre fichier ~/.bash_profile :

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 créer 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 fichiers APK de test et d'application :

  • Pour créer 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 tests d'instrumentation app-debug-test-unaligned.apk, qui se trouvent dans NotePad/app/build/outputs/apk/.

Si vous disposez d'un code source fonctionnel pour une application iOS, vous pouvez écrire un XCTest et créer un fichier ZIP à partir de l'application et des tests.

Exécuter un test avec Test Lab à l'aide de la CLI gcloud

Dans cette section, vous allez créer un projet Firebase et configurer votre environnement SDK Cloud Google local. Pour en savoir plus, consultez Commencer à tester avec la gcloud CLI .

Configurer gcloud CLI

  1. Téléchargez le SDK Google Cloud, qui inclut l'outil CLI gcloud.
  2. Vérifiez que votre installation est à jour :
gcloud components update
  1. Connectez-vous à la gcloud CLI à l'aide de votre compte Google :
gcloud auth login
  1. Définissez votre projet Firebase dans la gcloud CLI, où PROJECT_ID correspond à l'ID de votre projet Firebase. Vous trouverez l'ID du projet dans l'URL de la console Firebase, qui suit la convention d'attribution de noms suivante : https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

Si vous n'avez pas de projet Firebase, créez-en un dans la console Firebase.

Exécuter un test à l'aide des APK créé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 les appareils disponibles.

À l'aide de l'application et des APK que vous avez créés dans "Compiler 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 à l'aide de l'une des options suivantes :

  • gcloud summary : lorsque votre test est terminé, la CLI gcloud affiche un récapitulatif de base des résultats de votre test.
  • gcloudcode de sortie : une fois le test terminé, la commande se ferme avec la valeur 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 CLI gcloud affiche un lien vers la console Firebase. Le lien suit 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 seule exécution de test.
  • Fichier XML JUnit : la gcloud CLI affiche les informations suivantes :
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 : bucket Cloud Storage qui stocke les artefacts et les résultats des tests. Pour trouver le fichier XML JUnit contenant les résultats des tests, 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 d'intégration continue populaire, pour exécuter des tests avec Test Lab. Si vous souhaitez utiliser un autre système CI, consultez les bonnes pratiques avancées pour exécuter de grandes suites de tests et la documentation d'autres systèmes 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 gcloud CLI.

Ajouter un compte de service Google Cloud pour Jenkins

Les comptes de service sont des comptes limités destinés aux 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 anti-spam ni à des invites de saisie de code CAPTCHA, qui pourraient bloquer vos compilations CI.

Pour créer un compte de service, procédez comme suit :

  1. Ouvrez la page Comptes de service dans la console Google Cloud.
  2. Cliquez sur Créer un compte de service, ajoutez un Nom et une Description, puis cliquez sur Créer et continuer.
  3. Dans le menu déroulant Sélectionner un rôle, sélectionnez Basique, puis Éditeur.
  4. Cliquez sur Continuer, puis sur OK.

Ensuite, créez et téléchargez 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é du compte de service, procédez comme suit :

  1. 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éé.
  2. Sélectionnez Clés, puis cliquez sur Ajouter une clé et Créer une clé.
  3. Sélectionnez JSON, puis cliquez sur Créer.
  4. Lorsque vous êtes invité à télécharger le fichier, cliquez sur OK. Téléchargez le fichier dans un emplacement sûr sur votre ordinateur. Vous aurez besoin de ce fichier plus tard lors de la configuration de Jenkins.

Pour en savoir plus sur la création de comptes de service, consultez 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 effectué la section "Exécuter un test avec la gcloud CLI". L'API Cloud Tool Results vous permet d'accéder à vos résultats de test de manière programmatique.

  1. Ouvrez la bibliothèque d'API de la console Google Developers.
  2. 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.
  3. Cliquez sur Activer l'API sur la page de présentation de chaque API.

Installer et configurer Jenkins

Vous pouvez installer et configurer Jenkins CI sous Linux, macOS, Windows et dans de nombreux autres environnements. Certains détails de cet atelier de programmation sont spécifiques à l'installation et à l'exécution de Jenkins CI sur 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 utiliserez 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 GCloud SDK.

  1. Sur le tableau de bord Jenkins, cliquez sur Manage Jenkins (Gérer Jenkins), puis sur Manage Plugins (Gérer les plug-ins).
  2. Recherchez les plug-ins Git et SDK GCloud, puis installez-les (s'ils ne le sont pas déjà).

Configurer l'emplacement de vos SDK Android et Google Cloud

Vous allez maintenant indiquer à Jenkins où trouver le SDK Google Cloud et le SDK Android.

Pour configurer les SDK Google Cloud et Android pour Jenkins, procédez comme suit :

  1. Sur le tableau de bord Jenkins, cliquez sur Manage Jenkins (Gérer Jenkins), puis sur Global Tool Configuration (Configuration globale des outils).
  2. Dans la section SDK Google Cloud, cliquez sur Ajouter le SDK Google Cloud.
  3. Dans le champ Nom, saisissez un nom facile à retenir pour l'instance du SDK Google Cloud (par exemple, GCloud-SDK).
  4. Saisissez le répertoire d'accueil du SDK Google Cloud, par exemple /opt/google-cloud-sdk.
  5. Cliquez sur Enregistrer.
  6. Configurez les propriétés à l'échelle du système pour les SDK Android et Google Cloud en ouvrant Tableau de bord > Gérer Jenkins > Configurer le système.
  7. Cochez la case Variables d'environnement, puis cliquez sur Ajouter.
  8. Dans le champ Nom, saisissez ANDROID_HOME. Dans le champ Valeur, saisissez l'emplacement de votre SDK Android, par exemple /opt/Android/Sdk.
  9. Cochez la case Emplacements des outils, puis cliquez sur Ajouter. Dans le menu déroulant Name (Nom), sélectionnez le nom de l'instance du SDK Google Cloud que vous avez ajoutée dans la configuration globale des outils.
  10. Dans le champ Accueil, saisissez l'emplacement de votre SDK Google Cloud, par exemple /opt/google-cloud-sdk.
  11. 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 que Jenkins puisse s'authentifier et exécuter correctement les commandes gcloud CLI.

  1. Dans le tableau de bord Jenkins, cliquez sur Gérer Jenkins, puis sur Gérer les identifiants.
  2. Dans la section Stores scoped to Jenkins (Magasins limités à Jenkins), cliquez sur le lien de domaine (global), puis sur Add Credentials (Ajouter des identifiants).
  3. Dans le menu déroulant Kind (Type), sélectionnez Google Service Account from private key (Compte de service Google à partir d'une clé privée).
  4. Dans le champ Nom du projet, saisissez le nom de votre projet Firebase.
  5. Sélectionnez Clé JSON, puis cliquez sur Parcourir et accédez à l'emplacement où vous avez enregistré la clé de votre compte de service.
  6. Cliquez sur Créer.

Vous êtes maintenant prêt à configurer votre compilation automatisée Jenkins pour Test Lab.

4. Exécuter des tests Test Lab avec Jenkins CI

Maintenant que vous avez configuré Jenkins, rassemblons tous les éléments et exécutons le même test à l'aide de Jenkins.

Vous pouvez configurer Jenkins pour exécuter des builds et des tests automatisés chaque fois que des mises à jour de votre application sont enregistrées. Vous pouvez également configurer Jenkins pour qu'il exécute des compilations périodiquement. 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

  1. Ouvrez le tableau de bord Jenkins en accédant à http://localhost:8080.
  2. Dans le tableau de bord Jenkins, cliquez sur New Item (Nouvel élément).
  3. Saisissez un nom pour votre projet dans le champ Nom de l'élément, puis cliquez sur Projet Freestyle pour créer un projet qui utilise une seule configuration de compilation.
  4. Cliquez sur OK. Pour terminer la configuration du projet, remplissez les sections restantes dans l'ordre.

Configurer la gestion du code source

  1. Dans l'onglet Source Code Management (Gestion du code source), sélectionnez Git.
  2. 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. Pour activer l'authentification Google Cloud :

  1. Dans l'onglet Environnement de compilation, cochez la case Authentification GCloud SDK, puis sélectionnez le nom de l'installation que vous avez choisi lorsque vous avez ajouté les informations d'installation de Google Cloud.
  2. Dans le menu déroulant Google Credentials (Identifiants Google), sélectionnez les identifiants de compte de service que vous avez configurés.

Ajouter des étapes de compilation Gradle pour reconstruire les packages APK

  1. 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 le shell).
  2. 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 êtes maintenant prêt à 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 gcloud CLI, ajoutez une étape de compilation Exécuter le shell 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 exécuté avec gcloud CLI.

Pour exécuter des tests avec Jenkins, procédez comme suit :

  1. Pour déclencher manuellement la compilation, cliquez sur Build Now (Compiler maintenant).
  2. Pour vérifier la progression et les résultats, cliquez sur la nouvelle compilation > Sortie 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 exécuter de grands ensembles de tests

Lorsque vous souhaitez exécuter de nombreux tests simultanément, suivez ces bonnes pratiques pour vous assurer qu'ils s'exécutent rapidement et de manière fiable.

Augmenter la couverture sur plusieurs configurations d'appareils

Vous pouvez facilement ajouter plusieurs appareils à l'étape de compilation de gcloud CLI. Vous pouvez 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 orientation portrait et les paramètres régionaux en anglais
  • Un Samsung Galaxy S20 physique avec le niveau d'API 29 en mode paysage et les paramètres régionaux français
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 gcloud CLI

Si vous préférez gérer vos arguments à un seul endroit ou avec votre système de gestion de code source, vous pouvez les spécifier dans un fichier d'arguments au format YAML. Pour savoir comment utiliser cette fonctionnalité, exécutez gcloud topic arg-files.

Partitionner les tests à exécuter en parallèle

Le sharding de test divise un ensemble de tests en sous-groupes (shards) 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 Activer le partitionnement.

Pour activer le partitionnement, utilisez le canal gcloud beta et ajoutez l'option –num-uniform-shards ou –test-targets-for-shard à l'étape de compilation de gcloud CLI. Par exemple, pour répartir 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 de l'instabilité

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 ayant échoué était instable à l'aide de l'indicateur --num-flaky-test-attempts de la gcloud CLI. Cet indicateur spécifie le nombre de fois qu'une exécution de test doit être retentée si un ou plusieurs cas de test échouent pour une raison quelconque.

Par exemple, pour réexécuter les cas de test ayant échoué trois fois de plus après l'échec initial, spécifiez ce qui suit :

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 exécuté votre premier test Test Lab avec un système d'intégration continue.

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 gcloud CLI. Vous configurez également un projet Jenkins pour automatiser le même test.

Vous connaissez désormais 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

Documentation de référence