Cette page présente la bibliothèque SDV Test Framework et vous explique comment configurer et exécuter des tests. Utilisez SDV Test Framework pour les tests de bout en bout. L'outil repose sur Mobly. Vous écrivez des tests en Python.
Configurer l'environnement
Cette page suppose que vous avez déjà configuré votre station de travail pour SDV. Pour exécuter des tests de framework, installez virtualenv.
Dépendances Python
L'approche recommandée pour gérer les dépendances dans Android consiste à empaqueter les tests, Python et leurs dépendances en tant qu'exécutable à l'aide de la configuration de compilation. Vous devez suivre cette approche dans le dépôt de tests SDV.
La bibliothèque SDV Test Framework fournit ces dépendances par défaut :
moblyabsl-pyObligatoire pour utiliser la paramétrisation dans les tests.pexpectObligatoire pour la fonctionnalité des commandes interactives.ptyprocessObligatoire pour la fonctionnalité des commandes interactives.
Si vous avez besoin de dépendances spécifiques aux tests, incluez-les dans le fichier Android.bp du test :
python_test_host {
…
libs: [
"<DEPENDENCY1",
"<DEPENDENCY2",
…
],
…
}
Types de tests du système
Vous créez des tests système à l'aide de SDV Test Framework. Le framework distingue les types suivants. Catégorisez correctement les tests :
- Exemples de tests : exécutez des exemples de services SDV et vérifiez que le résultat correspond à la sortie attendue.
- Tests de bout en bout : n'utilisez pas d'exemples de services SDV.
- Tests de longue durée : conçus pour des périodes d'exécution prolongées.
- Tests de performances : utilisez la bibliothèque
perfetto. - Tests matériels : conçus pour être exécutés exclusivement sur un appareil physique, et non dans un Cuttlefish (CF).
Créer un test
Tous les tests écrits à l'aide du framework doivent se trouver dans le dépôt de tests. L'emplacement exact du test dépend de son type.
Configurer un test
Configurez tous les tests pour qu'ils s'exécutent à l'aide d'atest et de CATBox.
Configurer atest
Le framework fournit des modèles pour les tests à une, deux et trois machines virtuelles (VM). Ajoutez le code suivant à votre fichier Android.bp :
Une VM
python_test_host {
...
test_config_template: ":sdv_one_device",
}
Deux VM
python_test_host {
...
test_config_template: ":sdv_two_devices",
}
Trois VM
python_test_host {
...
test_config_template: ":sdv_three_devices",
}
Le modèle par défaut suffit pour la plupart des tests. Évitez de créer des configurations personnalisées, sauf si vous avez une raison impérieuse de le faire.
Modifier le délai avant expiration par défaut
Le délai avant expiration par défaut devrait suffire pour exécuter les tests localement.
Si votre test échoue localement en raison d'un délai avant expiration, envisagez de le diviser en plusieurs tests. Les tests très longs comportant de nombreux scénarios de test peuvent entraîner un goulot d'étranglement lors de l'exécution.
Si vous devez définir un délai avant expiration plus long que celui par défaut, poursuivez votre lecture.
Ignorer le délai avant expiration par défaut
Le framework n'est pas compatible avec l'extension du modèle pour l'exécution atest.
Par conséquent, utilisez les modèles fournis qui offrent un délai avant expiration plus long.
Test de longue durée sur une VM
python_test_host {
...
test_config_template: ":sdv_one_device_long_test",
}
Test de longue durée sur deux VM
python_test_host {
...
test_config_template: ":sdv_two_devices_long_test",
}
Ajoutez un commentaire qui indique clairement l'objectif de l'utilisation de ce modèle et explique pourquoi le délai plus long est nécessaire (par exemple, si le test nécessite le téléchargement d'un artefact qui prend un certain temps).
Envoyer des fichiers vers un appareil
Les étapes suivantes décrivent comment envoyer des fichiers vers un appareil pour les configurations atest.
Envoyer des fichiers vers un appareil
Le framework n'est pas compatible avec l'extension du modèle pour l'exécution atest.
Par conséquent, vous devez créer un fichier AndroidTest.xml qui remplace complètement le modèle par défaut et inclut les options target_preparer correspondantes pour les appareils.
Copiez le contenu du modèle :
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
Remplacez
{MODULE}par le nom du module de votre test.Ajoutez
com.android.tradefed.targetprep.PushFilePreparerà chaque appareil.
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
</target_preparer>
</device>
Configurer CATBox
Pour exécuter le test en tant que suite, une configuration CATBox est requise.
Créez un fichier de configuration dans
libraries/sdv/sdv_catbox/res/config/et suivez ces conventions d'attribution de noms :- Exemple de test :
sdv-sample-<NAME>-test.xml - Test de bout en bout
sdv-e2e-<NAME>-test.xml - Test de longue durée
sdv-long-running-<NAME>-test.xml - Test de performances :
sdv-performance-<NAME>-test.xml - Test matériel :
sdv-hw-<NAME>-test.xml
- Exemple de test :
Ajoutez les informations correspondantes en fonction du type de test :
Configuration de test sur une VM
<configuration description="SDV <NAME> Test">
<!-- Template for Device Configuration -->
<template-include name="device-config" default="sdv-device-config/one-device" />
<!-- Plan. Use the same name as the file name -->
<option name="plan" value="<CONFIG_FILE_NAME>"/>
<!-- Test: mobly-par-file-name should match the module name -->
<option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>
Configuration de test sur deux VM
<configuration description="SDV <NAME> Test">
<!-- Template for Device Configuration -->
<template-include name="device-config" default="sdv-device-config/two-devices" />
<!-- Plan. Use the same name as the file name -->
<option name="plan" value="<CONFIG_FILE_NAME>"/>
<!-- Test: mobly-par-file-name should match the module name -->
<option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>
Configuration de test sur trois VM
<!-- Copyright 2025 Google LLC -->
<configuration description="SDV <NAME> Test">
<!-- Template for Device Configuration -->
<template-include name="device-config" default="sdv-device-config/three-devices" />
<!-- Plan. Use the same name as the file name -->
<option name="plan" value="<CONFIG_FILE_NAME>"/>
<!-- Test: mobly-par-file-name should match the module name -->
<option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>
Le modèle par défaut suffit pour la plupart des tests. Évitez de créer des configurations personnalisées, sauf si vous avez une raison impérieuse de le faire.
Modifier le délai avant expiration par défaut
Si le délai avant expiration par défaut ne suffit pas pour votre test, vous pouvez le remplacer.
Ignorer le délai avant expiration par défaut
Pour remplacer le délai avant expiration par défaut, ajoutez le code suivant à la fin de votre fichier de configuration. Les tests longs doivent avoir un délai avant expiration maximal de 10 minutes.
<!-- Long Test - 10 minutes timeout: <REASON> -->
<option name="mobly-host:mobly-test-timeout" value="600000" />
Envoyer des fichiers vers un appareil
La section suivante explique comment envoyer des fichiers vers un appareil lors de la configuration de CATBox.
Envoyer des fichiers vers un appareil
Pour envoyer des fichiers vers l'appareil correspondant, ajoutez la configuration suivante après l'option plan :
<!-- Automatically pushes config file to device-->
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push-file"
key="<FILE_NAME>"
value="<REMOTE_FILE_PATH>"
/>
</target_preparer>
</device>
Si vous avez besoin des fichiers sur chaque appareil, ajoutez la configuration pour chaque appareil (par exemple, name=device1, name=device2).
Exécution de test
Ces instructions supposent que vous avez terminé la configuration d'un environnement SDV fonctionnel.
Configurer l'environnement
Le framework ne démarre pas les instances Cloud Virtual Device (CVD). Vous devez donc les démarrer avant d'exécuter les tests.
Configurez l'environnement et lancez la cible SDV :
. build/envsetup.sh lunch <TARGET>Démarrez la première instance CVD :
cvd create --config=sdv_core_instance1Démarrez la deuxième instance CVD (pour les tests sur plusieurs VM) :
cvd create --config=sdv_core_instance2Démarrez la troisième instance CVD (pour les tests sur plusieurs VM) :
cvd create --config=sdv_core_instance3
Exécuter atest
atest <TestModuleName>
Exécuter CATBox
Ces commandes supposent que vous vous trouvez dans le répertoire racine du dépôt.
- Compilez CATBox :
m catbox - (Facultatif) Affichez tous les plans de test SDV disponibles dans CATBox :
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-
Exécutez un test :
Exécuter un test sur une VM
NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520
Exécuter un test sur deux VM
NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521
Exécuter un test sur trois VM
NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522