Infrastructure de test automatisée

Android 9 inclut une infrastructure VTS (Vendor Test Suite) permettant de tester de manière automatisée des tests VTS, CTS ou d'autres tests sur des 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 permettre les tests automatisés plusieurs fois par jour sur plusieurs appareils.

Architecture

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

Architecture de test automatisée

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

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

  1. Récupère les artefacts de compilation et les ressources de test à différents emplacements :
    • Partner Android Build (PAB) Pour le framework GSI, VTS et d'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 centre d'aide se charge de récupérer les derniers builds, de les flasher sur les appareils et d'appeler des tests (en local ou via le commandant). 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é pour chaque compte.
  • Système de fichiers local (ou similaire). Pour les partenaires qui n'utilisent pas le build Android pour les partenaires.

Pour une utilisation ultérieure dans le flash des appareils, les ressources incluent des fournisseurs de compilation pour les deux options, à partir d'un seul build_provider.py qui stocke les builds dans des répertoires temporaires locaux.

Build Android 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

Un clic sur un lien de ressource dans le PAB envoie une requête POST qui inclut les données nécessaires pour cette ressource, y compris:

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

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 PAB (protégée par une authentification et accessible avec les identifiants OAuth2 appropriés).
  • Pour les autres ressources, il s'agit d'une longue URL non protégée de l'API Android Build interne (qui expire au bout de cinq minutes).

Obtenir l'URL

Pour éviter la falsification de requêtes intersites, le RPC buildsvc nécessite qu'un jeton XSRF soit envoyé via une requête 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

À partir d'un répertoire contenant une liste (ou un fichier ZIP) d'artefacts, le fournisseur de compilation définit les images pertinentes en fonction du contenu du 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 en utilisant 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 distant. 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.