Configuración de compilación simple

Cada módulo de prueba nuevo debe tener un archivo de configuración para dirigir el sistema de compilación con metadatos del módulo, instrucciones de empaquetado y dependencias de tiempo de compilación. Android ahora usa el sistema de compilación Soong para simplificar la configuración de pruebas.

Soong usa archivos Blueprint o .bp, que son descripciones declarativas simples similares a JSON de los módulos que se deben compilar. Este formato reemplaza el sistema basado en Make que se usaba en versiones anteriores. Consulta los archivos de referencia de Soong en el Panel de integración continua para obtener todos los detalles.

Para realizar pruebas personalizadas o usar el Conjunto de pruebas de compatibilidad (CTS) de Android, sigue la Configuración de pruebas complejas.

Ejemplo

Las siguientes entradas provienen de este archivo de configuración de Blueprint de ejemplo: /platform_testing/tests/example/instrumentation/Android.bp

Aquí se incluye una instantánea para mayor comodidad:

android_test {
    name: "HelloWorldTests",
    srcs: ["src/**/*.java"],
    sdk_version: "current",
    static_libs: ["androidx.test.runner"],
    certificate: "platform",
    test_suites: ["device-tests"],
}

Ten en cuenta que la declaración android_test al principio indica que se trata de una prueba. Incluir android_app indicaría, por el contrario, que se trata de un paquete de compilación.

Configuración

A continuación, se explican los siguientes parámetros de configuración:

    name: "HelloWorldTests",

El parámetro de configuración name es obligatorio cuando se especifica el tipo de módulo android_test (al comienzo del bloque). Le da un nombre a tu módulo, y el APK resultante tendrá el mismo nombre y un sufijo .apk, p.ej., en este caso, el APK de prueba resultante se llama HelloWorldTests.apk. Además, también define un nombre de destino de compilación para tu módulo, de modo que puedas usar make [options] <HelloWorldTests> para compilar tu módulo de prueba y todas sus dependencias.

    static_libs: ["androidx.test.runner"],

El parámetro de configuración static_libs indica al sistema de compilación que incorpore el contenido de los módulos con nombre en el APK resultante del módulo actual. Esto significa que se espera que cada módulo con nombre produzca un archivo .jar, y su contenido se usará para resolver las referencias de classpath durante el tiempo de compilación, además de incorporarse al APK resultante.

El módulo androidx.test.runner es el módulo compilado previamente para la biblioteca de AndroidX Test Runner, que incluye el ejecutor de pruebas AndroidJUnitRunner. AndroidJUnitRunner admite el framework de pruebas JUnit4 y reemplazó a InstrumentationTestRunner en Android 10. Obtén más información para probar apps para Android en Cómo probar apps en Android.

Si compilas un nuevo módulo de instrumentación, siempre debes comenzar con la biblioteca androidx.test.runner como ejecutor de pruebas. El árbol de origen de la plataforma también incluye otros frameworks de prueba útiles, como ub-uiautomator, mockito-target, easymock y muchos más.

    certificate: "platform",

El parámetro de configuración certificate indica al sistema de compilación que firme el APK con el mismo certificado que la plataforma principal. Esto es necesario si tu prueba usa un permiso o una API protegidos por firma. Ten en cuenta que esto es adecuado para las pruebas continuas de la plataforma, pero no se debe usar en los módulos de prueba de CTS. Ten en cuenta que este ejemplo usa este parámetro de configuración del certificado solo con fines ilustrativos: el código de prueba del ejemplo no necesita que el APK de prueba esté firmado con el certificado especial de la plataforma.

Si escribes una instrumentación para tu componente que se encuentra fuera del servidor del sistema, es decir, se empaqueta más o menos como un APK de app normal, excepto que se compila en la imagen del sistema y puede ser una app privilegiada, es probable que tu instrumentación se dirija al paquete de la app (consulta la sección a continuación sobre el manifiesto) de tu componente. En este caso, es posible que el archivo makefile de tu aplicación tenga su propio parámetro de configuración certificate, y tu módulo de instrumentación debería conservar el mismo parámetro de configuración. Esto se debe a que, para orientar la instrumentación en la app en prueba, el APK de prueba y el APK de la app deben firmarse con el mismo certificado.

En otros casos, no es necesario que tengas este parámetro de configuración: el sistema de compilación simplemente lo firmará con un certificado integrado predeterminado, según la variante de compilación, y, por lo general, se llama dev-keys.

    test_suites: ["device-tests"],

El parámetro de configuración test_suites hace que el arnés de prueba de Trade Federation pueda descubrir fácilmente la prueba. Aquí se pueden agregar otros paquetes, como el CTS, para que se pueda compartir esta prueba.

${ANDROID_PRODUCT_OUT}/testcases/HelloWorldTests/HelloWorldTests.apk

Configuración opcional

A continuación, se explican los siguientes parámetros de configuración opcionales:

    test_config: "path/to/hello_world_test.xml"

El parámetro de configuración test_config indica al sistema de compilación que tu destino de prueba necesita una configuración específica. De forma predeterminada, un AndroidTest.xml junto al Android.bp se asocia con la configuración.

    auto_gen_config: true

El parámetro de configuración auto_gen_config indica si se debe crear automáticamente la configuración de prueba. Si AndroidTest.xml no existe junto a Android.bp, no es necesario establecer este atributo como verdadero de forma explícita.

    require_root: true

El parámetro de configuración require_root indica al sistema de compilación que agregue RootTargetPreparer a la configuración de prueba generada automáticamente. Esto garantiza que la prueba se ejecute con permisos de administrador.

    test_min_api_level: 29

El parámetro de configuración test_min_api_level indica al sistema de compilación que agregue MinApiLevelModuleController a la configuración de prueba generada automáticamente. Cuando Trade Federation ejecuta la configuración de prueba, se omitirá la prueba si la propiedad del dispositivo de ro.product.first_api_level es < test_min_api_level.