Escribe una prueba sin dispositivo del lado del host en TF

En esta página, se explica cómo escribir una prueba del host que no requiere una como una prueba que se ejecuta en una instancia de Linux GCE. (Para obtener detalles sobre escribir una prueba controlada por host que requiera un dispositivo, consulta escribir una prueba basada en host en la Federación de Comercio).

Tipos de pruebas del host

Puedes ejecutar varios tipos de pruebas del lado del host a través de la Federación de Comercio (TF).

Pruebas nativas (gtest)

Crea pruebas nativas (gtests) para probar una plataforma. Si la prueba no requiere un dispositivo, ejecútala en un host; la prueba se ejecutará mucho más rápido de esa manera. Para configurar esas pruebas para que se ejecuten En un host de prueba, usa HostGTest de TF.

Esta es una configuración de prueba de muestra de TradeFed:

<configuration description="Runs hello_world_test.">
    <option name="null-device" value="true" />
    <test class="com.android.tradefed.testtype.HostGTest" >
        <option name="module-name" value="hello_world_test" />
    </test>
</configuration>

La configuración de prueba ejecuta una prueba de gtest (hello_world_test) en un host. La prueba de ejemplo config puede generarse automáticamente. A menos que la prueba necesite una configuración o limpieza especiales, puedes confiar en la generación automática de configuraciones de prueba para crear pruebas de TF adecuadas parámetros de configuración.

Para configurar una gtest del host y habilitar la generación de configuración de prueba automática, establece De host_supported a true in Android.bp, como en hello_world_test.

Para obtener más información sobre cómo escribir una prueba nativa, consulta Cómo agregar una nueva prueba nativa Ejemplo:

Pruebas de host JAR

Pruebas de host de JAR (Java), como JUnit, son pruebas que no necesitan ejecutarse en un dispositivo y que proporcionan código la cobertura de tu proyecto de Java. Estas pruebas se pueden configurar para que se ejecuten host usando el ejecutor HostTest.

Configuración de prueba de muestra de TradeFed

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

La configuración de prueba ejecuta una prueba JUnit del lado del host de HelloWorldHostTest. Ten en cuenta que la configuración de prueba anterior pueden generarse automáticamente. A menos que tu prueba necesite una configuración o limpieza especiales, confía en la generación de configuración de prueba automática para crear una prueba de TradeFed adecuada configuración.

Para obtener más información sobre cómo escribir una prueba de host JAR, consulta el archivo Página JAR (Java) Host Tests.

Pruebas de host de Java aisladas

Las pruebas de Java sin dispositivos se pueden ejecutar en un entorno de aislamiento con un ligero costo de rendimiento. Sin embargo, debes tener en cuenta algunas consideraciones importantes antes de usar esta en un entorno de nube.

  • Este es el ejecutor predeterminado que se usa para las pruebas de unidades de Robolectric y JUnit
  • Tradefed solo admite pruebas JUnit en el entorno de aislamiento.
  • Solo se admiten dependencias vinculadas de forma estática. No se declararon dependencias con lib se incluyen en la ruta de clase.
  • El ejecutor de aislamiento solo coloca el ejecutor de la corrección de compatibilidad y el jar de la prueba en la ruta de clase.
  • Existe cierta sobrecarga fija por cada ejecución de prueba que se ejecuta con este ejecutor.

Ejemplo de configuración de prueba de Tradefed (aislada)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Configuración de ejemplo de Soong para la generación automática

En lugar de crear manualmente la configuración de prueba, como se muestra anteriormente, Soong puede generar automáticamente la configuración usando una declaración como este ejemplo.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

Pruebas robóticas

Las pruebas de Robolectric usan el mismo ejecutor que las pruebas de host aislado, con algunos opciones de estado.

  • La opción robolectric-resources habilita algunas opciones de línea de comandos específicas de Robolectric al subproceso y agrega la compilación de árbol de android-all al subproceso la ruta de clase de subproceso. Si bien las otras dos son prácticas recomendadas, esta opción es obligatoria para ejecutando pruebas de Robolectric con éxito.
  • La opción java-folder permite cambiar el entorno de ejecución de Java que usa el subproceso. Este es debido a que Robolectric prefiere versiones particulares de Java que podrían no alinearse con el de la JVM preferida del sistema de host.
  • La opción exclude-paths permite que el ejecutor de subprocesos evite la carga de módulos específicos en absoluto, lo que es útil cuando un JAR viene con clases extrañas que podrían causar errores de carga. java. es una exclusión común para evitar arrojar excepciones SecurityException.

Ejemplo de configuración de Robolectric

<configuration description="Executes a Sample Robolectric Test">
    <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />
    <test class="com.android.tradefed.testtype.IsolatedHostTest">
        <option name="jar" value="RobolectricExampleTest.jar" />
    </test>
</configuration>

Configuración de muestra de Soong para la generación automática de Robolectric

En lugar de crear manualmente la configuración de prueba, como se muestra más arriba, Soong puede generar automáticamente la configuración con una declaración como este ejemplo.

android_robolectric_test {
    name: "HelloWorldRoboTest",
    srcs: [
        "src/**/*.java",
    ],

    // Include the testing libraries
    static_libs: [
        "mockito-robolectric-prebuilt",
        "platform-test-annotations",
        "testng",
        "truth-prebuilt",
    ],

    instrumentation_for: "HelloWorldApp",
}

Prueba de Python

Si la lógica de prueba está escrita en Python, usa el tipo de compilación python_test_host para crear un archivo par que se pueda ejecutado por TF PythonBinaryHostTest.

Configuración de prueba de muestra de TradeFed

<configuration description="Config to run atest unittests">
    <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
        <option name="par-file-name" value="atest_unittests" />
        <option name="test-timeout" value="2m" />
    </test>
</configuration>

Parámetro de configuración del paquete de pruebas

Para que TF pueda acceder a la prueba del lado del host para una compilación determinada, configura la configuración del módulo de prueba `test_suites` en `general-tests`

test_suites: ["general-tests"],

Con este parámetro de configuración, la prueba se empaqueta a general-tests.zip en el objetivo test_suites.