Cómo probar el código de la plataforma con atest

Android Studio for Platform (ASfP) se integra con los módulos de prueba de atest y Soong para que puedas ejecutar y depurar pruebas de la plataforma en tu máquina host de Linux, dispositivo conectado o dispositivo virtual Cuttlefish desde el IDE.

Requisitos previos

  • Abre un proyecto de ASfP configurado con tu implementación de AOSP y el destino lunch.
  • Para las pruebas de dispositivos, conecta un dispositivo físico o inicia un dispositivo virtual de Cuttlefish que ejecute una compilación coincidente.

Ejecuta y depura pruebas

Puedes iniciar pruebas de la plataforma y sesiones de depuración desde varios lugares en ASfP:

  • Objetivos de prueba de Android.bp: Abre un archivo Android.bp y haz clic en Ejecutar en el margen junto a cualquier módulo de prueba (*_test o *_test_host):
    • Ejecutar: Disponible para todos los tipos de módulos de prueba de Soong (android_test, java_test_host, cc_test, rust_test, python_test, sh_test y android_robolectric_test).
    • Debug: Disponible para los módulos android_test (conectados con el depurador de Java a través de atest --wait-for-debugger) y los módulos de prueba de C++ o Rust (cc_test, cc_test_host, rust_test y rust_test_host, iniciados con el depurador LLDB integrado de ASfP).
  • Íconos de margen del archivo fuente: Haz clic en Ejecutar junto a una clase de prueba o un método @Test en tu código fuente para ejecutar o depurar esa prueba específica.
  • Menú contextual (clic con el botón derecho): Haz clic con el botón derecho en un archivo, una clase, un método o un módulo Android.bp de prueba, y selecciona Run o Debug.
  • Agente integrado (IA en Android Studio): En la ventana de herramientas Agent, el agente integrado puede ejecutar destinos atest para verificar los cambios después de editar el código.
  • Terminal integrada: Abre Ver > Ventanas de herramientas > Terminal para ejecutar comandos de atest directamente.

Configuración y depuración de pruebas inteligentes

Cuando inicias una prueba desde el margen o el menú contextual, ASfP crea y configura una configuración de ejecución de Soong Test con tu gráfico de módulos de Android.bp.

Depura destinos de android_test Java y Kotlin

Haz clic en el ícono de margen junto a un módulo android_test en Android.bp, o bien junto a una clase JUnit de Java o Kotlin, o a un método @Test, y, luego, selecciona Debug "<TestName>". Desde el margen de un archivo fuente, ASfP elige el módulo android_test más cercano que incluya el archivo en su srcs y nombra la configuración <module>, <module>:<SimpleClass> o <module>:<SimpleClass>#<method>.

ASfP ejecuta atest con --wait-for-debugger, lee el atributo package de destino del AndroidManifest.xml del módulo, espera ese proceso en el dispositivo conectado y adjunta el depurador de Java.

Cómo depurar un método android_test desde el margen del editor

Depura los destinos cc_test y rust_test en LLDB

Para depurar un módulo de prueba de C++ o Rust (cc_test, cc_test_host, rust_test o rust_test_host), haz clic en el ícono de margen Android.bp y selecciona Debug "<TestName>". ASfP inicia el archivo binario de prueba compilado en su depurador LLDB integrado en lugar de ejecutarlo a través de atest.

Configura la configuración de ejecución de prueba de Soong

Abre Run > Edit Configurations y selecciona una configuración de Soong Test para personalizar la forma en que se compilan, implementan y ejecutan las pruebas:

  • Autocompletado de módulos y navegación Android.bp: El campo Module se autocompleta a partir de los módulos de prueba de Soong indexados en tu proyecto. Haz clic en Ir a Android.bp junto al campo para ir a la declaración del módulo en Android.bp.
  • Ejecutar en: Dispositivo o host (incluido host_supported: true): ASfP evalúa la regla del módulo y su cadena transitiva defaults (host_supported, device_supported, enabled, target.android.enabled y target.host.enabled):
    • Pruebas de doble objetivo (cc_test y rust_test con host_supported: true): Están disponibles los botones de selección Dispositivo y Host (Dispositivo es el valor predeterminado). Device y Host mantienen su propia plantilla de depurador LLDB independiente. Cambiar Ejecutar en entre Dispositivo y Host intercambia la configuración del dispositivo remoto lldb-server y la configuración binaria del host local, a la vez que conserva las personalizaciones realizadas en cada destino.
    • Pruebas de un solo destino: Si una prueba de C++ o Rust solo se compila para un entorno (como un cc_test solo para dispositivos o un cc_test_host o rust_test_host solo para el host), ASfP selecciona el destino compatible y, luego, inhabilita el botón de selección no compatible con una sugerencia explicativa: "<module> (<ruleType>) doesn't build for the host or device.".
  • Tareas previas al lanzamiento (compila el módulo de prueba nativo y realiza la implementación con atest): De forma predeterminada, cada configuración de Soong Test incluye dos tareas de Before launch:
    • Build Native Test Module: Compila <module>-target (para Device) o <module>-host (para Host) antes de iniciar LLDB.
    • Implementación con atest: Cuando se depura en Device, se ejecuta atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi> para que Tradefed envíe las dependencias de la prueba y ejecute los preparadores de destino antes de que LLDB inicie el archivo binario. Mantén el puntero sobre el chip Deploy with atest para obtener una vista previa del comando atest exacto. Para una iteración más rápida una vez que las dependencias ya están en el dispositivo, quita Deploy with atest para que ASfP solo envíe el archivo binario de prueba directamente. Cuando seleccionas Ejecutar en: Host, ASfP omite automáticamente Implementar con latest.
  • Opciones de modificación y depurador (tarjetas de opciones de LLDB): Usa Opciones de modificación para agregar campos de configuración opcionales:
    • Argumentos del programa (solo para pruebas de sistema operativo, C++ y Rust): Argumentos adicionales que se pasan directamente al objeto binario cc_test o rust_test después del filtro --gtest_filter o libtest durante la depuración.
    • Argumentos de atest (Test): Marcas adicionales que se pasan a atest cuando se ejecuta la prueba o cuando se prepara un dispositivo con Deploy with atest.
    • Debugger (solo para pruebas de C++ y Rust): Se muestra cuando Module es un destino cc_test* o rust_test*. Activa o desactiva las tarjetas de opciones de LLDB (como Detener en la entrada, Almacenar en caché los símbolos en las sesiones, Cargar símbolos a pedido o Con visualizadores de Rust para las pruebas de Rust), haz clic en Restablecer la configuración predeterminada para restablecer la plantilla activa de Dispositivo o Host, o bien agrega Directorios de símbolos, Comandos de inicialización, previos a la ejecución, posteriores a la ejecución o de salida y JSON de lanzamiento (Configuración de DAP) desde Modificar opciones > Depurador.

Configuración de ejecución de Soong Test que muestra las tareas previas al inicio, los destinos del dispositivo o del host, y las opciones de LLDB

Consulta los resultados de la prueba

El progreso de la ejecución de prueba, el estado de aprobación o falla, los seguimientos de pila y los registros del dispositivo aparecen en tiempo real dentro de la ventana de herramientas Ejecutar o Depurar en ASfP.

Sugerencias para las pruebas

  • Ejecuta pruebas segmentadas: Prueba métodos individuales desde el margen del editor sin ejecutar todo un paquete de pruebas.
  • Usa instantáneas de Cuttlefish: Cuando ejecutes pruebas de dispositivos en dispositivos virtuales de Cuttlefish, usa instantáneas para restablecer un estado limpio del dispositivo entre ejecuciones.
  • Inspecciona los registros de compilación de Soong: Si una prueba no se compila antes de ejecutarse, consulta la ventana de herramientas de Soong para ver los diagnósticos del compilador.