Intégrez Test Lab dans votre système CI/CD

1. Introduction

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

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

Exécuter des 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 tester autant de configurations que possible pour détecter les problèmes avant leurs utilisateurs. Mais les contraintes de coûts 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 continue/développement continu (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 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 CLI gcloud facilite l'intégration de la solution de test basée sur le cloud de Test Lab dans les flux de travail CI/CD existants.

Prise en charge multiplateforme

Test Lab fournit des solutions de test pour les applications Android et iOS et une prise en charge spécialisée pour les jeux mobiles comme Unity. Les options de test couvrent les frameworks de test populaires tels que 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 exigence matérielle

Test Lab héberge des appareils physiques dans les centres de données Google et des appareils virtuels dans Google Cloud. Tout ce que vous avez à faire est d’envoyer vos tests à Test Lab et d’attendre les résultats.

Rapide et fiable

L’exécution de nombreux scénarios de test simultanés peut prendre beaucoup de temps, bloquant les processus CI/CD. Avec Test Lab, vous pouvez facilement partager des tests et les exécuter sur plusieurs appareils en parallèle. Vous pouvez également détecter la desquamation, un problème courant lors des tests mobiles.

Ce que vous apprendrez

  • Comment créer des artefacts de test
  • Comment exécuter un test mobile à l'aide de gcloud CLI
  • Comment configurer Jenkins CI
  • Comment exécuter des tests mobiles à l'aide de Jenkins CI
  • Comment configurer les tests pour évoluer avec les systèmes CI

Cet atelier de programmation se concentre sur l'exécution de tests. Les concepts et blocs de code non pertinents sont passés sous silence et vous sont fournis pour que vous puissiez simplement les copier et les coller.

Ce dont vous aurez besoin

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. Ou apportez-vous simplement et nous vous fournirons les artefacts.

2. Exécutez un test avec gcloud CLI

Créer un APK d'application Android et tester un APK

Pour exécuter un test avec Test Lab, commencez par créer un APK d’application Android et un APK de test, qui contiennent des tests instrumentés à exécuter sur des périphériques matériels ou des émulateurs. Si vous disposez déjà d'une base de code fonctionnelle, vous pouvez créer vos propres APK ou utiliser BasicSample for Espresso .

Pour créer des APK à l'aide des commandes Gradle, vous devez installer le SDK Android. Si votre Android Studio n'est pas installé sur votre ordinateur, installez Android Studio et Android SDK , et définissez l'environnement ANDROID_HOME avec votre répertoire Android SDK. 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

Ensuite, exécutez 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 construction, vous pouvez trouver 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 créer des APK dans Android Studio, suivez les instructions dans Test 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 du 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.

Utiliser gcloud CLI pour exécuter un test avec Test Lab

Dans cette section, vous créez un projet Firebase et configurez votre environnement SDK Google Cloud local. Pour en savoir plus, consultez Commencer les tests avec gcloud CLI .

Configurer gcloud CLI

  1. Téléchargez le SDK Google Cloud , qui inclut l'outil gcloud CLI.
  2. Vérifiez que votre installation est à jour :
gcloud components update
  1. Connectez-vous à gcloud CLI à l'aide de votre compte Google :
gcloud auth login
  1. Définissez votre projet Firebase dans gcloud CLI, où PROJECT_ID est l'ID de votre projet Firebase. Vous pouvez trouver 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 n'avez pas de projet Firebase, créez-en un dans la console Firebase .

Exécutez un test en utilisant les APK intégrés

Dans cette section, vous exécutez 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, vérifiez les appareils disponibles .

À l'aide de l'application et des tests APK que vous avez créés dans Créer un APK d'application Android et tester l'APK, 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 des tests

Vous pouvez analyser les résultats des tests à l'aide de l'une des options suivantes :

  • Résumé gcloud : une fois votre test terminé, gcloud CLI imprime un résumé de base de vos résultats de test.
  • Code de sortie gcloud : 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 : gcloud CLI imprime un lien vers la console Firebase. Le lien suit la convention de dénomination 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 : gcloud CLI imprime 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 qui contient 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 utilisez Jenkins CI, un système CI populaire, pour exécuter des tests avec Test Lab. Si vous souhaitez utiliser un autre système CI, consultez les meilleures pratiques avancées pour exécuter de grandes suites de tests et la documentation pour d'autres systèmes CI comme Bitrise et Circle CI . Vous pouvez utiliser Flank comme alternative à gcloud CLI.

Activer 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 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 contrôles de spam ou à des invites captcha, qui pourraient autrement bloquer vos builds CI.

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

  1. Ouvrez la page Comptes de service dans Google Cloud Console.
  2. Cliquez sur Créer un compte de service , ajoutez un nom et une description , puis cliquez sur Créer et continuer .
  3. Dans la liste déroulante Sélectionner un rôle , sélectionnez De base , puis sélectionnez Éditeur .
  4. Cliquez sur Continuer , puis cliquez sur Terminé .

Ensuite, vous créez et téléchargez une clé d'authentification que Jenkins peut 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 Google Cloud Console, 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 nouvelle 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 endroit 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éation d'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 terminé Exécuter un test avec gcloud CLI. L'API Cloud Tool Results vous permet d'accéder par programmation à vos résultats de test.

  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 ( Cloud Testing API et Cloud Tool Results API ). La page de présentation de l'API demandée apparaît.
  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 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 Jenkins CI sous Linux, notamment l'utilisation de barres obliques (/) dans les chemins de 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 de Jenkins pour terminer la configuration et accéder au tableau de bord Jenkins à l'aide de http://localhost:8080 .

Vérifier les plugins installés

Jenkins prend en charge différents systèmes de contrôle de version. Dans cet atelier de programmation, vous utilisez Git pour exécuter le test précédent. Et pour obtenir une meilleure expérience d'exécution de gcloud CLI, vous devez installer le plug-in GCloud SDK.

  1. Sur le tableau de bord Jenkins, cliquez sur Gérer Jenkins , puis sur Gérer les plugins .
  2. Recherchez les plugins Git et GCloud SDK et installez-les (s'ils ne sont pas encore installés).

Configurez l'emplacement de vos SDK Android et Google Cloud

Vous indiquez maintenant à 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 Gérer Jenkins , puis cliquez sur Configuration globale des outils .
  2. dans la section SDK Google Cloud , cliquez sur Ajouter un 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 personnel de votre SDK Google Cloud, par exemple /opt/google-cloud-sdk .
  5. Cliquez sur Enregistrer .
  6. Configurez vos propriétés à l'échelle du système pour les SDK Android et Google Cloud en ouvrant Dashboard > Manage Jenkins > Configure System .
  7. Cochez la case Variables d'environnement et 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 et cliquez sur Ajouter . Dans la liste déroulante Nom , sélectionnez le nom de l'instance du SDK Google Cloud que vous avez ajoutée dans la configuration globale de l'outil.
  10. Dans le champ Accueil , saisissez l'emplacement de votre SDK Google Cloud, par exemple /opt/google-cloud-sdk .
  11. Cliquez sur Enregistrer .

Ajoutez les informations d'identification de votre compte de service à Jenkins

Vous ajoutez maintenant les informations d'identification de votre compte de service gcloud CLI à Jenkins afin que Jenkins puisse s'authentifier et exécuter avec succès les commandes gcloud CLI.

  1. Sur le tableau de bord Jenkins, cliquez sur Gérer Jenkins , puis sur Gérer les informations d'identification .
  2. Dans la section Stores scoped to Jenkins , cliquez sur le lien du domaine (global) , puis cliquez sur Add Credentials .
  3. Dans la liste déroulante Type , sélectionnez Compte de service Google à partir de la 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é votre clé de compte de service.
  6. Cliquez sur Créer .

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

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

Maintenant que vous avez configuré Jenkins, rassemblons tout et exécutons le même test en utilisant Jenkins.

Vous pouvez configurer Jenkins pour exécuter des builds automatisés et exécuter des tests chaque fois que les mises à jour de votre application sont archivées. Vous pouvez également configurer Jenkins pour exécuter des builds périodiquement. Pour en savoir plus sur la configuration des builds dans Jenkins, consultez Configuration des builds automatiques .

Créez et configurez 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. Sur le tableau de bord Jenkins, cliquez sur Nouvel élément .
  3. Entrez 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 configuration de build unique.
  4. Cliquez sur OK . Pour terminer les configurations du projet, complétez les sections restantes dans l’ordre.

Configurer la gestion du code source

  1. Dans l'onglet Gestion du code source , sélectionnez Git .
  2. Entrez https://github.com/android/testing-samples.git dans le champ URL du référentiel .

Configurer l'environnement de construction

La section Build Environment vous permet de configurer les caractéristiques de build. Activez l'authentification Google Cloud en suivant ces étapes :

  1. Dans l'onglet Environnement de construction , cochez la case 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.
  2. Dans la liste déroulante Informations d'identification Google , sélectionnez les informations d'identification du compte de service que vous avez configurées.

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

  1. Faites défiler jusqu'à la section Build , cliquez sur Add build step , puis sélectionnez Execute shell .
  2. Ajoutez une étape de build 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 création de gcloud CLI à Jenkins

Vous êtes maintenant prêt à ajouter une étape de construction à Jenkins pour exécuter Test Lab à l'aide de la ligne de commande gcloud CLI.

Pour ajouter l'étape de création de gcloud CLI, ajoutez une nouvelle étape de création d'exécution du 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

Après avoir terminé la configuration du projet, faites défiler vers le bas de la page 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 similaire au test manuel que vous avez exécuté avec gcloud CLI.

Pour exécuter un test avec Jenkins, procédez comme suit :

  1. Pour déclencher la génération manuellement, cliquez sur Créer maintenant .
  2. Vérifiez la progression et les résultats en cliquant sur la nouvelle version > Console Output .

Si vous ne voyez pas d'erreurs, félicitations ! Vous venez de configurer un projet et d'effectuer un test sur un appareil Pixel 2 en un seul clic. Si vous rencontrez des erreurs, consultez Dépannage .

5. Meilleures pratiques avancées pour exécuter de grandes suites de tests

Lorsque vous souhaitez exécuter plusieurs tests simultanément, suivez ces bonnes pratiques pour garantir que vos tests s'exécutent rapidement et de manière fiable.

Augmentez la couverture sur plusieurs configurations d’appareils

Vous pouvez facilement ajouter plusieurs appareils à l'étape de création de gcloud CLI. Et 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 API niveau 30 en orientation portrait et en langue anglaise
  • Un Samsung Galaxy S20 physique avec API niveau 29 en orientation paysage et en 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 gcloud CLI

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

Tests de fragments à exécuter en parallèle

Le partage de tests divise un ensemble de tests en sous-groupes (partitions) 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, ce qui permet à Test Lab de réaliser l'ensemble des tests plus rapidement. Pour plus d'informations, consultez Activer le partitionnement .

Pour activer le partitionnement, utilisez le canal gcloud beta et ajoutez l'indicateur –num-uniform-shards ou –test-targets-for-shard à l'étape de création de gcloud CLI. Par exemple, pour diviser 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 desquamations

Les tests mobiles peuvent souvent être instables. Parfois, les tests réussissent, et d’autres fois, ils peuvent échouer, même avec la même configuration. Vous pouvez détecter si un test échoué était instable à l'aide de l'indicateur gcloud CLI –num-flaky-test-attempts . Cet indicateur spécifie le nombre de fois qu'une exécution de test doit être réessayée si un ou plusieurs scénarios de test échouent pour une raison quelconque.

Par exemple, pour réexécuter les scénarios de test ayant échoué trois fois de plus après l'échec de l'exécution initiale, 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 effectué avec succès votre premier test Test Lab avec un système CI !

Vous avez créé des applications et testé des APK, et vous avez exécuté un test d'instrumentation avec Test Lab à l'aide de gcloud CLI. Vous avez également mis en place un projet Jenkins pour automatiser le même test.

Vous connaissez désormais les étapes clés pour intégrer Test Lab dans votre système CI/CD.

Et après?

Découvrez Comment configurer CI à l'aide de Firebase Emulator Suite

Lectures complémentaires

Documents de référence