Framework de test SDV

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 :

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

  1. Copiez le contenu du modèle :

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Mettez à jour {MODULE} avec 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 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
  2. 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.

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

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Démarrez la première instance de CVD (Cloud Virtual Device) :

    cvd create --config=sdv_core_instance1
    
  3. Démarrez la deuxième instance de CVD (Cloud Virtual Device) (pour les tests multi-VM) :

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

  1. Compiler 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é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