Biblioteca del framework de pruebas de SDV

En esta página, se proporciona una descripción general de la biblioteca de SDV Test Framework y se te guía en la configuración y la ejecución de las pruebas. Usa el framework de pruebas de SDV para realizar pruebas de extremo a extremo. La herramienta se basa en Mobly, y las pruebas se escriben en Python.

Elige un enfoque de prueba

Antes de escribir una prueba, elige el ejecutor de pruebas que coincida con tu alcance de verificación:

Alcance de la prueba Tipo de módulo de Soong Herramienta de ejecución Cuándo debe utilizarse
Pruebas de unidades de paquetes de servicios rust_test, rust_test_host o cc_test atest Verifica la lógica empresarial, las transformaciones de datos o los crates auxiliares aislados de Rust o C++ en el host o en una sola máquina virtual (VM) de Cuttlefish.
Pruebas del sistema de extremo a extremo y de varias VMs python_test_host (framework de pruebas de SDV) atest o CATBox Verifica la organización del ciclo de vida del paquete de servicios, la comunicación entre VMs, el puente SOME/IP o los destinos de hardware en una a tres VMs.

Configura el entorno

En esta página, se supone que ya configuraste tu estación de trabajo para SDV. Para ejecutar pruebas de Framework, instala virtualenv.

Dependencias de Python

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

La biblioteca de SDV Test Framework proporciona estas dependencias de forma predeterminada:

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

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

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

Tipos de pruebas del sistema

Las pruebas del sistema se crean 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 de SDV y verifica que el resultado coincida con el resultado esperado.
  • Pruebas de 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).

Cómo crear 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. Para conocer las rutas de acceso de directorios, las plantillas de clases de prueba de Python, las reglas de Android.bp y los lineamientos de programación de Mobly, consulta Creación de pruebas del sistema de SDV.

Configura 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 VMs. 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 de peso.

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, 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 superior al 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.

  • Una prueba larga de VM:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device_long_test",
    }
    
  • Prueba larga de dos VMs:

    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 tarda una cantidad de tiempo específica).

Cómo enviar archivos a un dispositivo

En los siguientes pasos, se describe cómo enviar 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 nombres:

    • Prueba de ejemplo: sdv-sample-<NAME>-test.xml
    • Prueba de 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:

    <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 de peso.

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 del 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 enviar archivos a un dispositivo cuando se configura CATBox.

Cómo enviar archivos a un dispositivo

Para enviar 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 completaste la configuración de un entorno de SDV en funcionamiento.

Configura el entorno

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

  1. Configura el entorno y, luego, inicia el destino de SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Inicia la primera instancia de CVD:

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

    cvd create --config=sdv_core_instance2
    
  4. Inicia la tercera instancia de 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