Pour comprendre cette section, commencez par étudier l'@Option Tradefed.
Les options standards de Tradefed permettent aux classes de test de recevoir des informations supplémentaires à partir de la configuration XML ou de la ligne de commande. Cette fonctionnalité vous permet d'effectuer une étape supplémentaire et de résoudre certaines de ces informations supplémentaires si nécessaire.
Exemple d'option de fichier
Exemple de fichier @option:
@Option(name = 'config-file')
private File mConfigFile;
Vous pouvez définir ce qui précède via la configuration XML:
<option name="config-file" value="/tmp/file" />
ou via une commande:
--config-file /tmp/file
Description
Cette fonctionnalité vous permet de résoudre les @Options de type "File" qui sont distantes dans un fichier local afin qu'elles soient disponibles de manière transparente du point de vue de l'utilisateur.
Pour que cela fonctionne, le fichier doit être spécifié avec un chemin de style distant. Exemple :
--config-file gs://bucket/tmp/file
Ce chemin d'accès pointe vers un fichier situé dans un bucket Google Cloud Storage (GCS) où il est stocké. Tradefed, lorsqu'il voit ce chemin d'accès distant, tente de télécharger le fichier localement et de l'attribuer à l'@Option. La variable mConfigFile
pointe désormais vers la version locale du fichier, qui peut être utilisée par le test.
Si le fichier distant ne peut pas être téléchargé pour une raison quelconque, Tradefed génère une exception ConfigurationException
qui empêche l'exécution du test. Nous considérons l'absence de ces fichiers comme une défaillance critique, car certains artefacts de test seront également manquants.
Utiliser des paramètres de requête
Vous pouvez ajouter des paramètres de requête à une URL à l'aide de ?
. Par exemple, gs://bucket/path?unzip=true
. La clé/valeur unzip=true
sera disponible dans l'implémentation de l'interface IRemoteFileResolver.
Deux comportements intégrés sont disponibles:
- unzip: si cette valeur est définie sur
true
et que le fichier téléchargé est un fichier ZIP, il est automatiquement décompressé dans un emplacement temporaire. Exemple:?unzip=true
- facultatif: la valeur par défaut est
false
. Si elle est définie surtrue
et que la résolution échoue, elle ne génère pas d'exception et ne remplace pas le fichier. Exemple :?optional=true
Vous pouvez également transmettre des arguments de requête globaux via --dynamic-download-args key=value
, qui transmettra la clé/valeur à tous les téléchargements dynamiques tentés lors de l'appel.
Protocoles compatibles
Voici les protocoles officiellement acceptés et les formats correspondants:
- Google Cloud Storage, protocole:
gs
, format:gs://<bucket name>/path
- Fichiers locaux, protocole:
file
, format:file:/local/path
- Liens HTTP, protocole:
http
, format:http://url
- Liens https, protocole:
https
, format:https://url
Limites
La résolution dynamique de @Option n'est actuellement compatible qu'avec un nombre limité de protocoles et d'emplacements de téléchargement. La résolution de @Option n'est actuellement activée que pour la configuration XML Tradefed principale.
Si l'exécution se fait en tant que suite, les modules actuels (AndroidTest.xml
) ne résolvent pas les fichiers par défaut.
Cela permet d'éviter que les modules ne créent des dépendances inconnues. Vous pouvez utiliser --enable-module-dynamic-download
au niveau de la suite pour éviter cela, mais les principales suites telles que la suite de tests de compatibilité (CTS) et la suite de tests de fournisseur (VTS) ne l'activeront pas.
Implémenter un nouveau protocole
Les protocoles compatibles sont implémentés dans Tradefed de l'interface IRemoteFileResolver, qui définit la balise courte du protocole qui sera mise en correspondance dans le chemin d'accès au fichier via getSupportedProtocol
. Par exemple, gs
est utilisé pour le protocole Google Cloud Storage. L'interface recommandée à implémenter est #resolveRemoteFiles(RemoteFileResolverArgs)
, qui sera l'interface à maintenance à long terme.
Les protocoles implémentés peuvent être ajoutés au fichier services META-INF du harnais pour activer officiellement la prise en charge.