Infrastructure de test automatisée

Android 9 inclut une infrastructure de suite de tests du fournisseur (VTS) pour les tests automatisés de VTS, CTS ou d'autres tests sur les appareils partenaires exécutant l'image système générique (GSI) AOSP. Auparavant, l'exécution de ces tests était une opération très manuelle. La nouvelle infrastructure de test VTS est conçue pour prendre en charge les tests automatisés plusieurs fois par jour sur plusieurs appareils.

Architecture

L'infrastructure de test automatisé VTS utilise l'architecture suivante:

Architecture de test automatisée

Figure 1. Architecture de l'infrastructure de test automatisé VTS

Lorsqu'un test est déclenché, l'infrastructure de test automatisé de VSTS effectue les tâches suivantes:

  1. Récupère les artefacts de compilation et les ressources de test à partir de différents emplacements :
    • Build Android partenaire (PAB) Pour le GSI, le framework VTS et certains autres builds.
    • Système de fichiers local, Google Cloud Storage ou autre système de compilation spécifique au fournisseur Pour les partenaires qui ne stockent pas de builds dans le cloud de Google.
  2. Flashe les artefacts de compilation (à partir de l'appareil) et le GSI (à partir d'AOSP) sur le ou les appareils connectés.
  3. Exécute des tests VTS à l'aide de TradeFed local ou d'un TradeFed dans le cloud.
  4. Enregistre les résultats des tests dans le tableau de bord VTS

Le processus est coordonné par le contrôleur hôte (HC) VTS, une machine du laboratoire qui dirige le comportement de tous les appareils connectés en cours de test. Le HC est chargé de récupérer les derniers builds, de les flasher sur les appareils et d'appeler des tests (localement ou via le contrôleur). Il communique également avec un planificateur cloud et dirige le trafic entre le planificateur et l'instance TradeFed (ou un autre harnais) exécutée sur le HC. Pour en savoir plus sur le contrôleur hôte, consultez la section Architecture du contrôleur hôte.

Fournisseurs de ressources

Les tests automatisés nécessitent des ressources telles que des builds système, des fichiers de test et des artefacts VTS. Bien qu'il soit possible de les compiler à partir de la source, il est plus facile de les compiler régulièrement à partir de la pointe de l'arbre, puis de publier les artefacts à télécharger.

Les partenaires peuvent accéder aux ressources d'automatisation à l'aide des emplacements suivants:

  • Build Android du partenaire Accès programmatique accordé par compte.
  • Système de fichiers local (ou similaire). Pour les partenaires qui n'utilisent pas le build Android pour les partenaires.

Pour flasher les appareils ultérieurement, les ressources incluent des fournisseurs de builds pour les deux options, qui s'étendent à partir d'un seul build_provider.py qui stocke les builds dans des répertoires temporaires locaux.

Build Android du partenaire

Sous Android 8.1 et versions antérieures, les partenaires Android devaient accéder au site Web de compilation Android pour les partenaires (https://partner.android.com/build), accéder à leur compte et récupérer les dernières images système via l'interface utilisateur. Pour aider les partenaires à éviter ce processus lent et laborieux, Android 9 permet de télécharger automatiquement ces ressources à partir de la PAB lorsque les identifiants appropriés sont fournis.

Établir l'accès

L'accès programmatique utilise OAuth2 sur les API Google pour accéder aux RPC requises. À l'aide de l'approche standard pour générer des identifiants OAuth2, le partenaire doit configurer une paire ID client/secret avec Google. Lorsque PartnerAndroidBuildClient est dirigé vers ce secret pour la première fois, une fenêtre de navigateur s'ouvre pour que l'utilisateur puisse se connecter à son compte Google, ce qui génère les identifiants OAuth2 nécessaires pour continuer. Les identifiants (jeton d'accès et jeton d'actualisation) sont stockés localement, ce qui signifie que les partenaires ne devraient avoir besoin de se connecter qu'une seule fois.

Requête POST pour l'URL

Cliquez sur un lien de ressource dans la PAB pour envoyer une requête POST incluant les données nécessaires à cette ressource, y compris:

  • ID de build, cible de build
  • nom de la ressource
  • branche
  • nom de la version candidate et si elle s'agit d'un build interne ou non

La requête POST est reçue par la méthode downloadBuildArtifact de l'RPC buildsvc, qui renvoie une URL permettant d'accéder à la ressource.

  • Pour les ressources APK Clockwork Companion, l'URL est une URL lisible hébergée sur le PAB (qui est protégé par authentification et accessible avec les identifiants OAuth2 appropriés).
  • Pour les autres ressources, l'URL est longue et non protégée de l'API Android Build interne (qui expire au bout de cinq minutes).

Obtenir l'URL

Pour éviter la falsification des requêtes intersites, la méthode RPC buildsvc nécessite qu'un jeton XSRF soit envoyé par POST avec les autres paramètres. Bien que ce jeton rende le processus plus sécurisé, il rend également l'accès programmatique beaucoup plus difficile, car le jeton (qui n'est disponible que dans le code JavaScript de la page PAB) est désormais également requis pour l'accès.

Pour éviter ce problème, Android 9 repense le schéma d'attribution de noms d'URL pour tous les fichiers (et pas seulement les APK) afin d'utiliser des noms d'URL prévisibles pour accéder aux listes d'artefacts et aux URL d'artefacts. Le PAB utilise désormais un format d'URL pratique qui permet aux partenaires de télécharger des ressources. Les scripts HC peuvent télécharger ces APK facilement, car le format d'URL est connu, et HC peut contourner les problèmes XSRF/cookie, car il n'a pas besoin de l'RPC buildsvc.

Système de fichiers local

Étant donné un répertoire contenant une liste (ou un fichier ZIP) d'artefacts, le fournisseur de compilation définit les images pertinentes en fonction de ce qui se trouve dans le répertoire. Vous pouvez utiliser l'outil gsutil pour copier des fichiers depuis Google Cloud Storage vers un répertoire local.

Compilations Flash

Une fois les images d'appareil les plus récentes téléchargées sur l'hôte, elles doivent être flashées sur les appareils. Pour ce faire, utilisez les commandes adb et fastboot standards et les sous-processus Python, en fonction des chemins d'accès aux fichiers temporaires stockés par les fournisseurs de compilation.

Actions autorisées:

  • Flasher uniquement la GSI
  • Flasher des images individuelles à partir du système principal (par exemple, fastboot flash boot boot.img)
  • Flashage de toutes les images à partir du système principal. Exemple :
    • fastboot flashall (à l'aide de l'utilitaire flashall intégré)
    • fastboot flash (un à la fois)

Exécuter des tests

Dans Android 9, l'infrastructure de test automatisé VTS n'est compatible qu'avec le faisceau de test TradeFed, mais elle pourrait être étendue à d'autres faisceaux à l'avenir.

Une fois les appareils préparés, vous pouvez appeler des tests à l'aide de l'une des options suivantes:

  • Lorsque vous utilisez TradeFed localement, utilisez la commande test dans le contrôleur hôte, qui prend le nom d'un plan de test VTS (par exemple, vts-selftest) et exécute le test.
  • Lorsque vous utilisez un cluster TradeFed (connecté à MTT de manière facultative), utilisez la commande lease dans la console du contrôleur hôte, qui recherche les exécutions de test incomplètes.

Si vous utilisez TradeFedCluster, TradeFed s'exécute localement en tant que gestionnaire à distance. Sinon, les tests sont appelés à l'aide de sous-processus Python.

Résultats du rapport

Les résultats des tests sont automatiquement signalés à certains projets de tableau de bord VTS par VtsMultiDeviceTest.