Infrastructure de test automatisée

Android 9 inclut une infrastructure Vendor Test Suite (VTS) pour les tests automatisés de 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 hautement 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 tests automatisés VTS utilise l'architecture suivante :

Automated test architecture

Figure 1. Architecture de l'infrastructure de tests automatisés VTS

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

  1. Récupère les artefacts de build et les ressources de test à partir de différents emplacements :
    • Partenaire Android Build (PAB) . Pour le framework GSI, VTS et quelques autres versions.
    • Système de fichiers local, Google Cloud Storage ou autre système de build spécifique au fournisseur . Pour les partenaires qui ne stockent pas les builds dans le cloud de Google.
  2. Les flashs créent des artefacts (à partir de l'appareil) et le GSI (à partir de l'AOSP) sur le(s) périphérique(s) connecté(s).
  3. Exécute des tests VTS en utilisant TradeFed local ou un TradeFed dans le cloud.
  4. Rapporte les résultats des tests au 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 testés. Le HC est chargé de récupérer les dernières versions, de les flasher sur les appareils et d'invoquer des tests (soit localement, soit 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 plus de détails sur le contrôleur hôte, consultez Architecture du contrôleur hôte .

Fournisseurs de ressources

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

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

  • Partenaire Android Build . Accès programmatique accordé par compte.
  • Système de fichiers local (ou similaire). Pour les partenaires qui n’utilisent pas Partner Android Build.

Pour une utilisation ultérieure lors du flashage des appareils, les ressources incluent des fournisseurs de build pour les deux options, s'étendant à partir d'un seul build_provider.py qui stocke les builds dans des répertoires temporaires locaux.

Version Android partenaire

Dans Android 8.1 et les versions antérieures, les partenaires Android devaient visiter le site Web Partner Android Build ( 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 fastidieux, Android 9 inclut la prise en charge du téléchargement automatique de ces ressources à partir de PAB lorsque les informations d'identification appropriées sont fournies.

Établir l'accès

L'accès par programmation utilise OAuth2 sur les API Google pour accéder aux RPC requis. En utilisant l' approche standard de génération d'identifiants OAuth2, le partenaire doit configurer une paire identifiant client/secret avec Google. Lorsque PartnerAndroidBuildClient pointe vers ce secret pour la première fois, il ouvre une fenêtre de navigateur permettant à l'utilisateur de se connecter à son compte Google, ce qui génère les informations d'identification OAuth2 nécessaires pour avancer. Les informations d'identification (jeton d'accès et jeton d'actualisation) sont stockées localement, ce qui signifie que les partenaires ne doivent se connecter qu'une seule fois.

Demande POST pour l'URL

Cliquer sur un lien de ressource dans PAB envoie une requête POST qui inclut les données nécessaires pour cette ressource, notamment :

  • identifiant de build, cible de build
  • nom de la ressource
  • bifurquer
  • publier le nom du candidat et si le candidat est ou non une version interne

La requête POST est reçue par la méthode downloadBuildArtifact du RPC buildsvc , qui renvoie une URL pouvant être utilisée pour accéder à la ressource.

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

Obtenez l'URL

Pour éviter la falsification de requêtes intersites, le RPC buildsvc nécessite qu'un jeton XSRF soit POSTé avec les autres paramètres. Bien que ce jeton rende le processus plus sécurisé, il rend également l'accès par programmation beaucoup plus difficile puisque le jeton (qui n'est disponible que dans le 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 de dénomination des URL pour tous les fichiers (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 URL pratique qui permet aux partenaires de télécharger des ressources ; Les scripts HC peuvent télécharger ces APK facilement, puisque le format de l'URL est connu, et HC peut contourner les problèmes XSRF/cookie car il n'a pas besoin du RPC buildsvc .

Système de fichiers local

Étant donné un répertoire avec une liste (ou un fichier zip) d'artefacts, le fournisseur de build définit les images pertinentes en fonction du contenu du répertoire. Vous pouvez utiliser l'outil gsutil pour copier des fichiers de Google Cloud Storage vers un répertoire local.

Versions Flash

Une fois les images des appareils les plus récentes téléchargées sur l'hôte, ces images doivent être flashées sur les appareils. Cela se fait à l'aide des commandes standard adb et fastboot et des sous-processus Python, basés sur les chemins de fichiers temporaires stockés par les fournisseurs de build.

Actions prises en charge :

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

Exécuter des tests

Dans Android 9, l'infrastructure de tests automatisés VTS prend en charge uniquement le harnais de test TradeFed, mais pourrait être étendue pour prendre en charge d'autres harnais à 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 (éventuellement connecté à MTT), utilisez la commande lease dans la console du contrôleur hôte, qui recherche les exécutions de tests non exécutées.

Si vous utilisez TradeFedCluster, TradeFed s'exécute localement en tant que gestionnaire distant . Sinon, les tests sont invoqué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 .