Ce document présente le framework de test SDV et vous guide dans la configuration et l'exécution des tests. Utilisez le framework de test SDV pour les tests de bout en bout. L'outil s'appuie sur Mobly. Vous écrivez des tests en Python.
Configurer l'environnement
Dans ce document, nous partons du principe que vous avez déjà configuré votre poste de travail pour SDV. Pour exécuter les tests du framework, installez virtualenv.
Dépendances Python
L'approche recommandée pour gérer les dépendances dans Android consiste à regrouper les tests, Python et leurs dépendances dans un 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-py: obligatoire pour utiliser la paramétrisation dans les tests.pexpectObligatoire pour la fonctionnalité de commandes interactives.ptyprocessObligatoire pour la fonctionnalité de 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 du framework de test SDV. Le framework distingue les types suivants. Classez 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 les 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 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 ci-dessous à 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 est suffisant pour la plupart des tests. Évitez de créer des configurations personnalisées, sauf si vous avez une bonne raison de le faire.
Modifier le délai avant expiration par défaut
Le délai avant expiration par défaut devrait suffire à exécuter les tests en local.
Si votre test échoue en local en raison d'un délai d'attente dépassé, 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 d'expiration supérieur à 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 d'inactivité prolongé.
Test long d'une VM
python_test_host {
...
test_config_template: ":sdv_one_device_long_test",
}
Test long avec 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 supplémentaire est nécessaire (par exemple, si le test nécessite le téléchargement d'un artefact qui prend un certain temps).
Transférer des fichiers vers un appareil
Les étapes suivantes décrivent comment transférer des fichiers vers un appareil pour les configurations atest.
Transférer 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
Mettez à jour
{MODULE}avec 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 respectez les conventions de dénomination suivantes :- Exemple de test :
sdv-sample-<NAME>-test.xml - Test E2E :
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 d'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 avec 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 avec 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 est suffisant pour la plupart des tests. Évitez de créer des configurations personnalisées, sauf si vous avez une bonne raison de le faire.
Modifier le délai avant expiration par défaut
Si le délai avant expiration par défaut n'est pas suffisant 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 les éléments suivants à la fin de votre fichier de configuration. Le délai avant expiration maximal des tests longs doit être de 10 minutes.
<!-- Long Test - 10 minutes timeout: <REASON> -->
<option name="mobly-host:mobly-test-timeout" value="600000" />
Transférer des fichiers vers un appareil
La section suivante explique comment transférer des fichiers vers un appareil lors de la configuration de CATBox.
Transférer des fichiers vers un appareil
Pour transférer 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é de configurer 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 de CVD (Cloud Virtual Device) :
cvd create --config=sdv_core_instance1Démarrez la deuxième instance de CVD (Cloud Virtual Device) (pour les tests multi-VM) :
cvd create --config=sdv_core_instance2Démarrez la troisième instance de CVD (Cloud Virtual Device) (pour les tests multi-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.
- Compiler 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écuter un test
Exécuter un test de 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