Configurer des suites

Une suite dans Tradefed fait référence à une configuration dans laquelle plusieurs tests sont exécutés sous un programme d'exécution de tests commun qui pilote l'exécution globale.

Dans Tradefed, les suites sont pilotées via la classe ITestSuite , qui permet d'ajouter et de supprimer des tests indépendamment de la façon 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 rapporter leurs résultats sous un seul appel.
  • Configuration de niveau supérieur : configuration appliquée aux appareils avant d'exécuter l'un des modules de test.
  • Configuration principale : configuration XML Tradefed au niveau de la suite qui décrit quels modules doivent être exécutés et quelle configuration de niveau supérieur doit être utilisée.
  • Configuration au niveau du module : configuration appliquée aux appareils juste avant d'exécuter le module. Celles-ci sont également appelées configurations spécifiques au module .
  • Configuration du module : fait référence à la configuration XML AndroidTest.xml Tradefed qui décrit les modules et quelle configuration au niveau du module doit être effectuée.
  • 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 harnais à l'intérieur du module.
  • Nouvelle tentative de la suite : réexécution complète des tests précédemment échoués de la suite.

Structure ITestSuite

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

Nous appelons parfois ITestSuite l' exécuteur de suite .

L'exécuteur de suite suit ces étapes lors de l'exécution :

  1. Chargez la configuration du module et déterminez quel ensemble doit être exécuté.
  2. Exécutez chaque module :

    1. Exécutez l’installation au niveau du module.
    2. Exécutez des tests de modules.
    3. Exécutez le démontage au niveau du module.
  3. Rapportez les résultats.

Configuration de niveau supérieur

Du point de vue de Tradefed, ITestSuite n'est qu'un autre test. C'est un test complexe mais ce n'est encore qu'un test comme n'importe quel autre IRemoteTest . Ainsi, lors de la spécification de l'exécuteur de suite dans une configuration Tradefed, Tradefed suit le modèle habituel de configuration : exécuter build_provider , target_preparer , test (notre suite dans ce cas) et target_cleaner .

Cette séquence dans la configuration Tradefed contenant ITestSuite est la configuration de niveau supérieur.

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 les métadonnées du 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.

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

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

<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 mode différent, 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 ont un gestionnaire associé dans ModuleParametersHelper qui vous permet de modifier la configuration du module pour qu'il s'exécute dans le mode particulier.

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

Pour que le paramétrage ait lieu, la ligne de commande doit l'activer avec :

--enable-parameterized-modules

Il est également possible d'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 rapporte ses résultats sous un nom de module paramétré, par exemple CtsGestureTestCases[instant] versus base CtsGestureTestCases .