Configurar paquetes

Un conjunto en Tradefed hace referencia a una configuración en la que se ejecutan varias pruebas en un ejecutor de pruebas común que controla la ejecución general.

En Tradefed, los paquetes se controlan a través de la clase ITestSuite, lo que permite agregar y quitar pruebas independientemente de cómo se ejecuten.

Definiciones

  • Paquete: Es un conjunto de módulos de prueba configurados para ejecutarse en una configuración de nivel superior similar para informar sus resultados en una sola invocación.
  • Configuración de nivel superior: Es la configuración que se aplica a los dispositivos antes de ejecutar cualquiera de los módulos de prueba.
  • Configuración principal: Es la configuración XML de Tradefed a nivel del paquete que describe qué módulos se deben ejecutar y qué configuración de nivel superior se debe usar.
  • Configuración a nivel del módulo: Es la configuración que se aplica a los dispositivos justo antes de ejecutar el módulo. También se los conoce como parámetros de configuración específicos del módulo.
  • Configuración del módulo: Se refiere a la configuración XML de Tradefed AndroidTest.xml que describe los módulos y qué configuración a nivel del módulo se debe realizar.
  • Módulo: Es una unidad de prueba compuesta por un paso de configuración (configuración a nivel del módulo), un paso de ejecución de prueba y un paso de desmantelamiento.
  • Reinicio dentro del módulo: Reinicio automático que realiza el arnés dentro del módulo.
  • Reintento del paquete: Vuelve a ejecutar todas las pruebas del paquete que fallaron anteriormente.

Estructura de ITestSuite

ITestSuite en Tradefed hace referencia a la clase base común que controla la ejecución de un paquete. Se comparte en todos los paquetes de pruebas principales, específicamente el Conjunto de pruebas de compatibilidad (CTS) de Android y el Conjunto de pruebas de proveedores de Android (VTS), y garantiza una experiencia de ejecución coherente en todos los paquetes.

A veces, nos referimos a ITestSuite como el ejecutor de suites.

El ejecutor de paquetes sigue estos pasos cuando se ejecuta:

  1. Carga la configuración del módulo y determina qué conjunto se debe ejecutar.
  2. Ejecuta cada módulo:

    1. Ejecuta la configuración a nivel de módulo.
    2. Ejecuta pruebas de módulos.
    3. Ejecuta el desmantelamiento a nivel del módulo.
  3. Informa los resultados.

Configuración de nivel superior

Desde el punto de vista de Tradefed, ITestSuite es solo otra prueba. Es una prueba compleja, pero sigue siendo una prueba como cualquier otra IRemoteTest. Por lo tanto, cuando se especifica el ejecutor de suites en una configuración de Tradefed, Tradefed sigue el patrón habitual de la configuración: ejecutar build_provider, target_preparer, prueba (nuestro paquete en este caso) y target_cleaner.

Esta secuencia en la configuración de Tradefed que contiene ITestSuite es la configuración de nivel superior.

Ejemplo:

<configuration description="Common config for Compatibility suites">

    <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
    <!-- Setup applied before the suite: so everything running in the suite will
    have this setup beforehand -->
    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put global package_verifier_enable 0" />
        <option name="teardown-command" value="settings put global package_verifier_enable 1"/>
    </target_preparer>

    <!-- Our ITestSuite implementation -->
    <test class="com.android.compatibility.common.tradefed.testtype.suite.CompatibilityTestSuite" />

    <result_reporter class="com.android.compatibility.common.tradefed.result.ConsoleReporter" />
</configuration>

Metadatos de módulos

Llamamos metadatos del módulo a la información adicional especificada en el módulo de prueba AndroidTest.xml. Estos metadatos te permiten especificar información adicional sobre el módulo, y los módulos se pueden filtrar con los metadatos.

Ejemplo de metadatos:

<option name="config-descriptor:metadata" key="component" value="framework" />
<option name="config-descriptor:metadata" key="parameter" value="instant_app" />

Ejemplo de filtro en metadatos:

--module-metadata-include-filter component=framework

Lo anterior ejecutaría todos los módulos con un framework como metadatos de componente.

Ejemplo completo de AndroidTest.xml:

<configuration description="Config for CTS Gesture test cases">
    <option name="test-suite-tag" value="cts" />
    <!-- Metadata -->
    <option name="config-descriptor:metadata" key="component" value="framework" />
    <option name="config-descriptor:metadata" key="parameter" value="instant_app" />
    <!-- End: metadata -->
    <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
        <option name="cleanup-apks" value="true" />
        <option name="test-file-name" value="CtsGestureTestCases.apk" />
    </target_preparer>
    <test class="com.android.tradefed.testtype.AndroidJUnitTest" >
        <option name="package" value="android.gesture.cts" />
        <option name="runtime-hint" value="10m50s" />
    </test>
</configuration>

Módulo parametrizado

Un tipo de metadatos especial es parameter.

<option name="config-descriptor:metadata" key="parameter" value="instant_app" />

Estos metadatos especifican que el módulo debe ejecutarse en un modo diferente, por ejemplo, como una app instantánea, en lugar de un modo de app estándar.

ModuleParameters describe todos los modos o parámetros posibles y tiene un controlador asociado en ModuleParametersHelper que te permite cambiar la configuración del módulo para que se ejecute en el modo en particular.

Por ejemplo, el modo de app instantánea fuerza la instalación del APK como modo instantáneo.

Para que se realice la parametrización, la línea de comandos debe habilitarla con lo siguiente:

--enable-parameterized-modules

También es posible ejecutar un solo modo determinado con lo siguiente:

--enable-parameterized-modules --module-parameter <Mode>

--enable-parameterized-modules --module-parameter INSTANT_APP

Cuando se ejecuta una versión parametrizada de un módulo, informa sus resultados con un nombre de módulo parametrizado, por ejemplo, CtsGestureTestCases[instant] en comparación con CtsGestureTestCases base.