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:
moblyabsl-pyEs obligatorio para usar la parametrización en las pruebas.pexpectEs obligatorio para la funcionalidad de comandos interactivos.ptyprocessEs 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.
Copia el contenido de la plantilla:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
Actualiza
{MODULE}con el nombre del módulo de tu prueba.Agrega
com.android.tradefed.targetprep.PushFilePreparera 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.
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
- Prueba de ejemplo:
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.
Configura el entorno y, luego, inicia el destino de SDV:
. build/envsetup.sh lunch <TARGET>Inicia la primera instancia de CVD:
cvd create --config=sdv_core_instance1Inicia la segunda instancia de CVD (para pruebas de varias VMs):
cvd create --config=sdv_core_instance2Inicia 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.
- Compila CATBox:
m catbox - (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:6520Ejecuta 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:6521Ejecuta 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