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 utiliza el sistema de compilación Soong para ofrecer configuración de prueba.

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

Para admitir pruebas personalizadas o usar Conjunto de pruebas de compatibilidad (CTS) de Android, sigue Configuración de prueba compleja en su lugar.

Ejemplo

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

Aquí se incluye un resumen para tu 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, en cambio, que se trata de una compilación. .

Configuración

La siguiente configuración proporciona una explicació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 asigna un nombre a tu módulo, y la El APK tendrá el mismo nombre y con un sufijo .apk, p.ej., En este caso, El APK de la prueba resultante se llama HelloWorldTests.apk. Además, esto también define un nombre de destino para tu módulo, de modo que puedas usar make [options] <HelloWorldTests> para compilar el módulo de prueba y todas sus dependencias.

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

El parámetro de configuración static_libs le indica al sistema de compilación que incorpore el contenido. de los módulos nombrados 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 que se usan para resolver referencias de rutas de clase durante el tiempo de compilación, así como incorporada en el APK resultante.

El módulo androidx.test.runner es la compilación previa para AndroidX Test Runner Biblioteca, que incluye el ejecutor de pruebas AndroidJUnitRunner AndroidJUnitRunner es compatible con el framework de prueba de JUnit4 y se reemplazó. InstrumentationTestRunner en Android 10 Más información sobre cómo probar apps para Android en Cómo probar apps en Android.

Si estás compilando un nuevo módulo de instrumentación, la biblioteca androidx.test.runner como ejecutor de pruebas El árbol fuente de la plataforma también incluye otros frameworks de prueba útiles, como ub-uiautomator, mockito-target, easymock y otros

    certificate: "platform",

El parámetro de configuración certificate le indica al sistema de compilación que firme el APK con el mismo certificado como la plataforma principal. Esto es necesario si la prueba usa una API o un permiso protegido con firma. Ten en cuenta que esto es adecuado para la administración pruebas, pero no debe usarse en los módulos de prueba de CTS. Ten en cuenta que este ejemplo usa esta configuración de certificado solo con fines ilustrativos: el código de prueba. del ejemplo no necesita realmente que el APK de prueba se firme con el certificado especial de plataforma.

Si escribes una instrumentación para tu componente que se encuentra fuera de del sistema de archivos, es decir, se empaqueta más o menos como un APK normal de la app, salvo que está integrada en la imagen del sistema y puede ser una aplicación con privilegios, es que tu instrumentación se orientará al paquete de app (consulta a continuación (sección sobre el manifiesto) de tu componente. En este caso, tu aplicación Makefile puede tener su propia configuración de certificate, y tu instrumentación debería conservar la misma configuración. Esto se debe a que segmentar tus anuncios para instrumentación en la app que se está probando, se deben firmar los APK de prueba y de app con el mismo certificado.

En otros casos, no necesitas tener esta configuración: el sistema de compilación lo firmará con un certificado integrado predeterminado basado en el que, por lo general, se llama dev-keys.

    test_suites: ["device-tests"],

El parámetro de configuración test_suites hace que la prueba sea fácil de encontrar para el comercio Agente de prueba de federación. Aquí se pueden agregar otros paquetes, como CTS, para que esta es posible que se comparta la prueba.

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

Configuración opcional

A continuación, se explica la siguiente configuración opcional:

    test_config: "path/to/hello_world_test.xml"

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

    auto_gen_config: true

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

    require_root: true

La configuración require_root le 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 la raíz permisos.

    test_min_api_level: 29

El parámetro de configuración test_min_api_level le indica al sistema de compilación que agregue MinApiLevelModuleController a la configuración de prueba generada automáticamente. Cuando operas La federación ejecuta la configuración de la prueba; esta se omitirá si la propiedad del dispositivo de ro.product.first_api_level < test_min_api_level