Marco de trabajo de pruebas de SDV

En este documento, se proporciona una descripción general del framework de pruebas de SDV y se te guía para configurar y ejecutar pruebas. Usa el framework de pruebas de SDV para realizar pruebas de extremo a extremo. La herramienta se basa en Mobly y escribes pruebas en Python.

Configura el entorno

En este documento, se supone que ya configuraste tu estación de trabajo para la SDV. Para ejecutar pruebas de Framework, instala virtualenv.

Dependencias de Python

El enfoque recomendado para administrar dependencias en Android es empaquetar pruebas, Python y sus dependencias como un ejecutable con la configuración de compilación. Debes seguir este enfoque en el repositorio de pruebas del SDV.

La biblioteca del framework de pruebas de SDV proporciona estas dependencias de forma predeterminada:

  • mobly
  • absl-py Se requiere para usar la parametrización en las pruebas.
  • pexpect Se requiere para la funcionalidad de comandos interactivos.
  • ptyprocess Se requiere para la funcionalidad de comandos interactivos.

Si necesitas dependencias específicas para las pruebas, inclúyelas en el archivo Android.bp de la prueba.

python_test_host {
    …
    libs: [
        "<DEPENDENCY1",
        "<DEPENDENCY2",
        …
    ],
    …
}

Tipos de pruebas del sistema

Crearás pruebas del sistema con el framework de pruebas de SDV. El framework distingue entre los siguientes tipos. Categoriza las pruebas correctamente:

  • Pruebas de muestra: Ejecuta servicios de muestra del SDV y verifica que el resultado coincida con el resultado esperado.
  • Pruebas E2E: No uses servicios de muestra de SDV.
  • Pruebas de larga duración: Están diseñadas para períodos de ejecución prolongados.
  • Pruebas de rendimiento: Usa la biblioteca perfetto.
  • Pruebas de hardware: Están diseñadas para ejecutarse exclusivamente en un dispositivo físico, no en un Cuttlefish (CF).

Crea una prueba

Todas las pruebas escritas con el framework deben ubicarse en el repositorio de pruebas. La ubicación exacta de la prueba depende de su tipo.

Cómo configurar una prueba

Configura todas las pruebas para que se ejecuten con atest y CATBox.

Configura atest

El framework proporciona plantillas para pruebas de una, dos y tres máquinas virtuales (VM). Agrega lo siguiente a tu archivo Android.bp:

Una VM

python_test_host {
  ...
  test_config_template: ":sdv_one_device",
}

Dos VMs

python_test_host {
  ...
  test_config_template: ":sdv_two_devices",
}

Tres VMs

python_test_host {
  ...
  test_config_template: ":sdv_three_devices",
}

La plantilla predeterminada es suficiente para la mayoría de las pruebas. Evita crear configuraciones personalizadas, a menos que haya un motivo convincente.

Actualiza el tiempo de espera predeterminado

El tiempo de espera predeterminado debería ser suficiente para ejecutar las pruebas de forma local.

Si la prueba falla de forma local debido a un tiempo de espera agotado, considera dividirla en diferentes pruebas. Las pruebas muy largas con muchos casos de prueba pueden causar un cuello de botella en la ejecución.

Si debes establecer un tiempo de espera más alto que el predeterminado, sigue leyendo.

Anula el tiempo de espera predeterminado

El framework no admite la extensión de la plantilla para la ejecución de atest. Por lo tanto, usa las plantillas proporcionadas que ofrecen un tiempo de espera extendido.

Prueba de larga duración de una VM

python_test_host {
  ...
  test_config_template: ":sdv_one_device_long_test",
}

Prueba de dos VMs de larga duración

python_test_host {
  ...
  test_config_template: ":sdv_two_devices_long_test",
}

Agrega un comentario que indique claramente el propósito de usar esta plantilla y explique por qué es necesario el tiempo extendido (por ejemplo, si la prueba requiere descargar un artefacto que lleva una cantidad específica de tiempo).

Cómo enviar archivos a un dispositivo

En los siguientes pasos, se describe cómo transferir archivos a un dispositivo para las configuraciones de atest.

Cómo enviar archivos a un dispositivo

El framework no admite la extensión de la plantilla para la ejecución de atest. Por lo tanto, debes crear un archivo AndroidTest.xml que reemplace por completo la plantilla predeterminada y que incluya las opciones de target_preparer correspondientes para los dispositivos.

  1. Copia el contenido de la plantilla:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Actualiza {MODULE} con el nombre del módulo de tu prueba.

  3. Agrega com.android.tradefed.targetprep.PushFilePreparer a cada dispositivo.

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

Configura CATBox

Para ejecutar la prueba como un paquete, se requiere una configuración de CATBox.

  1. Crea un archivo de configuración nuevo en libraries/sdv/sdv_catbox/res/config/ y sigue estas convenciones de nomenclatura:

    • Prueba de ejemplo: sdv-sample-<NAME>-test.xml
    • Prueba E2E: sdv-e2e-<NAME>-test.xml
    • Prueba de larga duración: sdv-long-running-<NAME>-test.xml
    • Prueba de rendimiento: sdv-performance-<NAME>-test.xml
    • Prueba de hardware: sdv-hw-<NAME>-test.xml
  2. Agrega la información correspondiente según el tipo de prueba:

Configuración de prueba de una 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>

Configuración de prueba de dos VMs

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

Configuración de prueba de tres VMs

<!-- 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>

La plantilla predeterminada es suficiente para la mayoría de las pruebas. Evita crear configuraciones personalizadas, a menos que haya un motivo convincente.

Actualiza el tiempo de espera predeterminado

Si el tiempo de espera predeterminado no es suficiente para tu prueba, puedes anularlo.

Anula el tiempo de espera predeterminado

Para anular el tiempo de espera predeterminado, agrega lo siguiente al final de tu archivo de configuración. Las pruebas largas deben tener un tiempo de espera máximo de 10 minutos.

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

Cómo enviar archivos a un dispositivo

En la siguiente sección, se describe cómo transferir archivos a un dispositivo cuando se configura CATBox.

Cómo enviar archivos a un dispositivo

Para transferir archivos al dispositivo correspondiente, agrega la siguiente configuración después de la opción 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 necesitas los archivos en cada dispositivo, agrega la configuración para cada uno (por ejemplo, name=device1, name=device2).

Ejecución de prueba

En estas instrucciones, se supone que ya configuraste un entorno de SDV en funcionamiento.

Configura el entorno

El framework no inicia instancias de Cloud Virtual Device (CVD), por lo que debes iniciarlas antes de ejecutar las pruebas.

  1. Configura el entorno y lanza el destino de la SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Inicia la primera instancia de Cloud Virtual Device (CVD):

    cvd create --config=sdv_core_instance1
    
  3. Inicia la segunda instancia de Cloud Virtual Device (CVD) (para pruebas de varias VMs):

    cvd create --config=sdv_core_instance2
    
  4. Inicia la tercera instancia de Cloud Virtual Device (CVD) (para pruebas de varias VMs):

    cvd create --config=sdv_core_instance3
    

Ejecuta atest

atest <TestModuleName>

Ejecuta CATBox

En estos comandos, se supone que estás en el directorio raíz del repositorio.

  1. Compila CATBox: m catbox
  2. Opcional: Consulta todos los planes de prueba de SDV disponibles en CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

Ejecuta una prueba:

Ejecuta una prueba 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

Ejecuta la prueba de dos VMs

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

Ejecuta la prueba de tres VMs

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