Utiliser la nouvelle tentative de la suite

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

Un grand nombre de tests peut échouer en raison d'une mauvaise isolation ou d'un mauvais état des appareils.

La fonctionnalité de nouvelle tentative de suite est conçue pour répondre à ces cas: elle vous permet de réessayer uniquement les échecs au lieu des suites complètes afin d'éliminer les erreurs et l'isolation insuffisante. Si un test échoue de manière cohérente, la nouvelle tentative échoue également. Vous recevez alors un signal beaucoup plus fort indiquant qu'il existe un problème réel.

Implémenter la suite Réessayer

La nouvelle tentative de résultats implique la lecture des résultats précédents et la réexécution de l'appel précédent.

L'interface principale qui pilote 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 ne réexécuter que les échecs précédents ou les tests non exécutés.

Exemple de nouvelle tentative de suite: CTS

La configuration de la nouvelle tentative 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.

Il est appelé 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 réactivée et réexécutée avec des filtres supplémentaires. Cela signifie que si votre commande d'origine incluait des options, elles font également partie de la nouvelle tentative.

Exemple :

cts-tradefed run cts-dev -m CtsGestureTestCases

La nouvelle tentative de la commande ci-dessus est toujours liée à CtsGestureTestCases, car nous réessayons une commande qui ne la concernait qu'elle.

Configurer la nouvelle tentative pour une suite de type 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" />

Cela doit être ajouté à la configuration XML de la commande principale, ce qui 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 du test_result.xml existant pour préparer l'appel de nouvelle tentative.