Configurar paquete

Suite en Tradefed se refiere a la configuración en la que se ejecutan varias pruebas bajo un corredor de prueba común que impulsa la ejecución general.

En Tradefed, las suites se controlan a través de la clase ITestSuite , que permite agregar y eliminar pruebas independientemente de cómo se ejecuten.

Definiciones

  • Suite: conjunto de módulos de prueba configurados para ejecutarse bajo una configuración de nivel superior similar para informar sus resultados bajo una sola invocación.
  • Configuración de nivel superior: Configuración aplicada a los dispositivos antes de ejecutar cualquiera de los módulos de prueba.
  • Configuración principal: la configuración XML de Tradefed de nivel de suite que describe qué módulos se deben ejecutar y qué configuración de nivel superior se debe usar.
  • Configuración a nivel de módulo: Configuración aplicada a los dispositivos justo antes de ejecutar el módulo. También se conocen como configuraciones específicas del módulo .
  • Configuración del módulo: se refiere a la configuración XML de AndroidTest.xml Tradefed que describe los módulos y qué configuración a nivel de módulo se debe realizar.
  • Módulo: Unidad de prueba compuesta por un paso de configuración ( configuración a nivel de módulo ), un paso de ejecución de prueba y un paso de desmontaje.

  • Reintento intramódulo: reintento automático realizado por el arnés dentro del módulo.

  • Reintento de la suite: Reejecución completa de las pruebas fallidas anteriores de la suite.

Estructura de ITestSuite

ITestSuite en Tradefed se refiere a la clase base común que impulsa la ejecución de una suite. Lo comparten todos los conjuntos de pruebas principales, específicamente el conjunto de pruebas de compatibilidad de Android (CTS) y el conjunto de pruebas de proveedores de Android (VTS) , y garantiza una experiencia de ejecución uniforme en todos los conjuntos.

A veces nos referiremos a ITestSuite como el ejecutor de la suite .

El corredor de la suite sigue estos pasos al ejecutar:

  1. Cargue la configuración del módulo y determine qué conjunto debe ejecutarse.
  2. Ejecute cada módulo: a. Ejecute la configuración a nivel de módulo b. Ejecutar pruebas de módulo c. Ejecutar desmontaje a nivel de módulo
  3. Reportar los resultados

Configuración de nivel superior

Desde el punto de vista de Tradefed, ITestSuite es solo otra prueba. Es complejo, pero sigue siendo solo una prueba como cualquier otro IRemoteTest . Entonces, al especificar el ejecutor de la suite en una configuración de Tradefed, Tradefed seguirá el patrón habitual de la configuración: ejecutar build_provider , target_preparer , test (nuestra suite 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 del módulo

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

Metadatos de ejemplo:

<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 marco como metadatos de componentes .

Ejemplo completo 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 especial de metadatos es el parameter .

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

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

Todos los modos o parámetros posibles están descritos por ModuleParameters y tienen un controlador asociado en ModuleParametersHelper que le permite cambiar la configuración del módulo para ejecutar en el modo particular.

Por ejemplo, el modo de aplicación instantánea forzará la instalación de APK como modo instantáneo.

Para que ocurra la parametrización, la línea de comando debe habilitarla a través de:

--enable-parameterized-modules

También es posible ejecutar un solo modo dado a través de:

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

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

Cuando se ejecuta una versión parametrizada de un módulo, informará sus resultados con un nombre de módulo parametrizado, por ejemplo, CtsGestureTestCases[instant] frente a base CtsGestureTestCases.