Android 9 inclut une infrastructure VTS (Vendor Test Suite) 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 :
Lorsqu'un test est déclenché, l'infrastructure de test automatisé VTS effectue les tâches suivantes :
- Récupère les artefacts de compilation et les ressources de test à partir de différents emplacements :
- Version Android pour les partenaires (PAB). Pour le framework GSI, VTS et certaines autres compilations.
- 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 les builds dans le cloud de Google.
- Flashe les artefacts de compilation (depuis l'appareil) et la GSI (depuis AOSP) sur les appareils connectés.
- Exécute les tests VTS à l'aide de TradeFed local ou d'un TradeFed dans le cloud.
- Signale les résultats des tests au tableau de bord VTS
Le processus est coordonné par le contrôleur hôte VTS (HC, VTS host controller), 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 dernières versions, de les flasher sur les appareils et d'appeler les tests (localement 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 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 version la plus récente, puis de publier les artefacts à télécharger.
Les partenaires peuvent accéder aux ressources d'automatisation aux emplacements suivants :
- Version Android du partenaire : L'accès programmatique est accordé par compte.
- Système de fichiers local (ou similaire). Pour les partenaires qui n'utilisent pas la version Android Partner.
Pour une utilisation ultérieure dans le flashage des appareils, les ressources incluent des fournisseurs de compilation pour les deux options, à partir d'un seul build_provider.py
qui stocke les compilations dans des répertoires temporaires locaux.
Version Android pour les partenaires
Dans les versions d'Android 8.1 et antérieures, les partenaires Android devaient accéder au 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 laborieux, Android 9 permet de télécharger automatiquement ces ressources depuis 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 requis.
En utilisant l'approche standard pour générer des identifiants OAuth2, le partenaire doit configurer une paire ID client/code secret avec Google. Lorsque PartnerAndroidBuildClient
pointe vers ce secret pour la première fois, une fenêtre de navigateur s'ouvre pour permettre à l'utilisateur de 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
Lorsque vous cliquez sur un lien de ressource dans PAB, une requête POST est envoyée. Elle inclut les données nécessaires pour cette ressource, y compris :
- ID de build, cible de build
- nom de la ressource
- branche
- le nom de la version candidate et si elle est une version interne
La requête POST est reçue par la méthode downloadBuildArtifact
du 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 (qui est protégée par authentification et accessible avec les identifiants OAuth2 appropriés).
- Pour les autres ressources, l'URL est une URL 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, le RPC buildsvc
nécessite qu'un jeton XSRF soit envoyé avec les autres paramètres. Bien que ce jeton sécurise le processus, 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 de dénomination des 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 facilement ces APK, car le format d'URL est connu, et HC peut contourner les problèmes liés aux cookies/XSRF, car il n'a pas besoin du 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 du contenu du répertoire. Vous pouvez utiliser l'outil gsutil pour copier des fichiers de 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 standards adb
et fastboot
, ainsi que les sous-processus Python, en fonction des chemins d'accès aux fichiers temporaires stockés par les fournisseurs de compilation.
Actions prises en charge :
- Flasher uniquement la GSI
- Flasher des 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'utilitaireflashall
intégré)fastboot flash
(un à la fois)
Exécuter des tests
Dans Android 9, l'infrastructure de tests automatisés VTS ne prend en charge que 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 en local, 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 effectuées.
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
VtsMultiDeviceTest
signale automatiquement les résultats des tests à certains projets de tableau de bord VTS.