Configurer des suites

Une suite dans Tradefed fait référence à une configuration dans laquelle plusieurs tests sont exécutés sous un exécuteur de test commun qui gère l'exécution globale.

Dans Tradefed, les suites sont gérées via la classe ITestSuite, qui permet d'ajouter et de supprimer des tests indépendamment de la manière dont ils sont exécutés.

Définitions

  • Suite: ensemble de modules de test configurés pour s'exécuter sous une configuration de niveau supérieur similaire afin de générer leurs résultats sous une seule invocation.
  • Configuration de premier niveau: configuration appliquée aux appareils avant l'exécution de l'un des modules de test.
  • Configuration principale: configuration XML Tradefed au niveau de la suite qui décrit les modules à exécuter et la configuration de niveau supérieur à utiliser.
  • Configuration au niveau du module: configuration appliquée aux appareils juste avant l'exécution du module. Ils sont également appelés configurations spécifiques au module.
  • Configuration du module: fait référence à la configuration XML Tradefed AndroidTest.xml qui décrit les modules et la configuration au niveau du module à effectuer.
  • Module: unité de test composée d'une étape de configuration (configuration au niveau du module), d'une étape d'exécution du test et d'une étape de démontage.
  • Nouvelle tentative intra-module: nouvelle tentative automatique effectuée par le faisceau dans le module.
  • Nouvelle tentative de la suite: réexécution complète des tests de la suite ayant précédemment échoué.

Structure de l'ITestSuite

ITestSuite dans Tradefed fait référence à la classe de base commune qui gère l'exécution d'une suite. Il est partagé par toutes les principales suites de tests, en particulier la suite de tests de compatibilité Android (CTS) et la suite de tests de fournisseurs Android (VTS), et garantit une expérience d'exécution cohérente dans toutes les suites.

Nous appelons parfois ITestSuite le lecteur de suite.

L'exécuteur de la suite suit les étapes ci-dessous lors de l'exécution:

  1. Chargez la configuration du module et déterminez quel ensemble doit s'exécuter.
  2. Exécutez chaque module:

    1. Exécutez la configuration au niveau du module.
    2. Exécuter les tests du module
    3. Exécutez une analyse au niveau du module.
  3. Présentez les résultats.

Configuration de premier niveau

Du point de vue de Tradefed, ITestSuite n'est qu'un autre test. Il s'agit d'un élément complexe, mais qui n'est encore qu'un test, comme n'importe quel autre IRemoteTest. Par conséquent, lorsque vous spécifiez le programme d'exécution de la suite dans une configuration Tradefed, Tradefed suit le modèle habituel de la configuration: exécution de build_provider, target_preparer, test (notre suite dans ce cas) et target_cleaner.

Cette séquence de la configuration Tradefed contenant ITestSuite correspond à la configuration de premier niveau.

Exemple :

<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>

Métadonnées du module

Nous appelons métadonnées de module les informations supplémentaires spécifiées dans le module de test AndroidTest.xml. Ces métadonnées vous permettent de spécifier des informations supplémentaires sur le module, et les modules peuvent être filtrés à l'aide des métadonnées.

Exemples de métadonnées:

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

Exemple de filtre sur les métadonnées:

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

Ce qui précède exécuterait tous les modules avec un framework en tant que métadonnées de composant.

Exemple complet 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>

Module paramétré

parameter est un type de métadonnées spécial.

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

Ces métadonnées spécifient que le module doit être exécuté dans un autre mode, par exemple en tant qu'application instantanée, au lieu d'un mode d'application standard.

Tous les modes ou paramètres possibles sont décrits par ModuleParameters et sont associés à un gestionnaire dans ModuleParametersHelper. Il vous permet de modifier la configuration du module pour qu'il s'exécute dans le mode particulier.

Par exemple, le mode d'application instantanée force l'installation de l'APK en mode instantané.

Pour que la paramétrisation se produise, la ligne de commande doit l'activer avec:

--enable-parameterized-modules

Vous pouvez également exécuter un seul mode donné avec:

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

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

Lorsqu'une version paramétrée d'un module s'exécute, elle affiche ses résultats sous un nom de module paramétré, par exemple CtsGestureTestCases[instant] par rapport à la base CtsGestureTestCases.