Un conjunto en Tradefed hace referencia a una configuración en la que se ejecutan varias pruebas en un panel de pruebas común que impulsa la ejecución general.
En Tradefed, los conjuntos se controlan a través de la clase ITestSuite
, que permite agregar y quitar pruebas independientemente de cómo se ejecuten.
Definiciones
- Suite: Es un conjunto de módulos de prueba configurados para ejecutarse con una configuración de nivel superior similar y registrar 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 conjunto que describe qué módulos deben ejecutarse 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 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 del módulo se debe realizar. - Módulo: Unidad de prueba compuesta por un paso de configuración (configuración a nivel del módulo), un paso de ejecución de la prueba y un paso de desmontaje.
- Reintento dentro del módulo: Es el reintento automático que realiza el arnés dentro del módulo.
- Reintento del paquete: Se vuelve a ejecutar por completo el paquete de pruebas que fallaron anteriormente.
Estructura de ITestSuite
ITestSuite
en Tradefed hace referencia a la clase base común que controla la ejecución de un conjunto de pruebas. Todas las suites de pruebas principales, específicamente el Conjunto de pruebas de compatibilidad (CTS) de Android y el Conjunto de pruebas del proveedor (VTS) de Android, lo comparten y garantiza una experiencia de ejecución coherente en todas las suites.
A veces, nos referimos a ITestSuite como el ejecutor de la suite.
El ejecutor de la suite sigue estos pasos cuando se ejecuta:
- Carga la configuración del módulo y determina qué conjunto debe ejecutarse.
Ejecuta cada módulo:
- Ejecuta la configuración a nivel del módulo.
- Ejecuta pruebas de módulos.
- Ejecuta la limpieza a nivel del módulo.
Informa 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
. Por lo tanto, cuando se especifica el ejecutor de la suite en una configuración de Tradefed, Tradefed sigue el patrón habitual de la configuración: ejecuta build_provider
, target_preparer
, la prueba (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 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
El comando anterior ejecutaría todos los módulos con un framework como metadatos de component.
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
parameter
es un tipo de metadatos especial.
<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.
Todos los modos o parámetros posibles se describen en ModuleParameters
y tienen un controlador asociado en ModuleParametersHelper
que te permite cambiar la configuración del módulo para que se ejecute en el modo particular.
Por ejemplo, el modo de app instantánea fuerza la instalación del APK como modo instantáneo.
Para que se produzca la parametrización, la línea de comandos debe habilitarla con el siguiente comando:
--enable-parameterized-modules
También es posible ejecutar un solo modo determinado con el siguiente comando:
--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 el CtsGestureTestCases
base.