Utiliser la nouvelle tentative de la suite

Une suite a tendance à inclure plusieurs modules de test et peut atteindre une taille de corpus de test assez importante. Par exemple, la suite de tests de compatibilité Android (CTS) comprend des centaines de modules et des centaines de milliers de cas de test.

Un grand nombre de tests peuvent échouer en raison d'une mauvaise isolation ou d'appareils qui passent dans un mauvais état.

La fonctionnalité de nouvelle tentative de la suite est conçue pour résoudre ces problèmes : elle vous permet de réessayer uniquement les échecs au lieu des suites complètes afin d'éliminer l'instabilité et l'isolation insuffisante. Si un test échoue systématiquement, la nouvelle tentative échoue également et vous obtenez un signal beaucoup plus fort indiquant qu'il y a un réel problème.

Implémenter la réexécution de la suite

La réexécution des résultats implique la lecture des résultats précédents et la réexécution de l'invocation précédente.

L'interface principale qui gère la nouvelle tentative est ITestSuiteResultLoader, qui vous permet de charger un résultat précédent et la ligne de commande précédente.

RetryRescheduler utilise ensuite ces informations pour recréer la commande précédente et renseigner certains filtres afin de réexécuter uniquement les tests ayant échoué ou n'ayant pas été exécutés.

Exemple de nouvelle tentative de suite : CTS

La configuration des nouvelles tentatives dans CTS est la suivante :

<configuration description="Runs a retry of a previous CTS session.">
    <object type="previous_loader" class="com.android.compatibility.common.tradefed.result.suite.PreviousResultLoader" />
    <test class="com.android.tradefed.testtype.suite.retry.RetryRescheduler" />

    <logger class="com.android.tradefed.log.FileLogger">
        <option name="log-level-display" value="WARN" />
    </logger>
</configuration>

Cela s'applique à la plupart des suites qui l'étendent, par exemple VTS.

Elle serait appelée avec :

cts-tradefed run retry --retry <session>

Pour trouver la session, listez les résultats précédents dans la console CTS :

cts-tf > l r
Session  Pass  Fail  Modules Complete  Result Directory     Test Plan  Device serial(s)  Build ID   Product
0        2092  30    148 of 999        2018.10.29_14.12.57  cts        [serial]          P          Pixel

La commande d'origine exacte sera rechargée et réexécutée avec des filtres supplémentaires. Cela signifie que si votre commande d'origine comprenait des options, elles font également partie de la nouvelle tentative.

Exemple :

cts-tradefed run cts-dev -m CtsGestureTestCases

La nouvelle tentative ci-dessus est toujours liée à CtsGestureTestCases, car nous tentons à nouveau d'exécuter une commande qui n'impliquait que lui.

Configurer les nouvelles tentatives pour une suite de style CTS

Pour que la nouvelle tentative fonctionne, les résultats précédents doivent être exportés au format proto. Vous devez ajouter les éléments suivants :

<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />

Cette ligne doit être ajoutée à la configuration XML de la commande principale. Elle entraîne la création d'un fichier test-record.pb dans le dossier de résultats.

La nouvelle tentative CTS charge ensuite les données à partir d'une combinaison de test-record.pb et de test_result.xml existant pour préparer l'appel de nouvelle tentative.