Cette page présente la bibliothèque SDV Test Framework et vous explique comment configurer et exécuter 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.
Choisir une approche de test
Avant d'écrire un test, choisissez l'exécuteur de test correspondant à votre champ de validation :
| Champ d'application du test | Type de module Soong | Outil d'exécution | Quand l'utiliser |
|---|---|---|---|
| Tests unitaires du pack de services | rust_test, rust_test_host ou cc_test |
atest |
Vérifiez la logique métier, les transformations de données ou les crates d'assistance Rust ou C++ isolés sur l'hôte ou sur une seule machine virtuelle (VM) Cuttlefish. |
| Tests système de bout en bout et multi-VM | python_test_host (framework de test SDV) |
atest ou CATBox |
Vérifiez l'orchestration du cycle de vie des bundles de services, la communication entre les VM, le pontage SOME/IP ou les cibles matérielles sur une à trois VM. |
Configurer l'environnement
Cette page suppose que vous avez déjà configuré votre station de travail pour SDV. Pour exécuter des tests Framework, installez virtualenv.
Dépendances Python
Pour gérer les dépendances dans Android, il est recommandé d'empaqueter les tests, Python et leurs dépendances sous forme d'exécutable à l'aide de la configuration de compilation. Vous devez suivre cette approche dans le dépôt de test 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.pexpect: requis pour la fonctionnalité de commandes interactives.ptyprocess: requis 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 au résultat attendu.
- 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 un Cuttlefish (CF).
Créer un test
Tous les tests écrits à l'aide du framework doivent se trouver dans le dépôt de test. L'emplacement exact du test dépend de son type. Pour connaître les chemins d'accès aux répertoires, les modèles de classe de test Python, les règles Android.bp et les consignes de codage Mobly, consultez Créer un test du système SDV.
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 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 raison impérieuse de le faire.
Mettre à jour 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 supérieur à la valeur 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 de atest.
Par conséquent, utilisez les modèles fournis qui offrent un délai avant expiration prolongé.
Test long sur une VM :
python_test_host { ... test_config_template: ":sdv_one_device_long_test", }Test long sur deux VM :
python_test_host { ... test_config_template: ":sdv_two_devices_long_test", }
Ajoutez un commentaire indiquant clairement l'objectif de l'utilisation de ce modèle et expliquant pourquoi le temps prolongé 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 de atest.
Par conséquent, vous devez créer un fichier AndroidTest.xml qui remplace entièrement 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 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 du 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 :
<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 raison impérieuse de le faire.
Mettre à jour 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 ce qui suit à 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" />
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 chacun d'eux (par exemple, name=device1, name=device2).
Exécution de test
Ces instructions supposent que vous avez configuré un environnement SDV fonctionnel.
Configurer l'environnement
Le framework ne démarre pas les instances d'appareil virtuel Cloud (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 :
cvd create --config=sdv_core_instance1Démarrez la deuxième instance de CVD (pour les tests multi-VM) :
cvd create --config=sdv_core_instance2Démarrez la troisième instance de CVD (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.
- 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é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:6520Exécuter le 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:6521Exécuter le test avec 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