Bibliothèque du framework de test SDV

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 :

  • mobly
  • absl-py Obligatoire pour utiliser la paramétrisation dans les tests.
  • pexpect Obligatoire pour la fonctionnalité des commandes interactives.
  • ptyprocess Obligatoire 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.

  1. Copiez le contenu du modèle :

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Remplacez {MODULE} par le nom du module de votre test.

  3. 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.

  1. 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
  2. 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.

  1. Configurez l'environnement et lancez la cible SDV :

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Démarrez la première instance CVD :

    cvd create --config=sdv_core_instance1
    
  3. Démarrez la deuxième instance CVD (pour les tests sur plusieurs VM) :

    cvd create --config=sdv_core_instance2
    
  4. Dé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.

  1. Compilez CATBox : m catbox
  2. (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