Un test peut échouer pour n'importe quelle raison. Parfois, il suffit de le relancer pour qu'il réussisse (en raison d'une instabilité, par exemple à cause de problèmes dans l'infrastructure sous-jacente). Vous pouvez configurer Tradefed pour qu'il effectue automatiquement la nouvelle tentative.
L'objectif principal de la nouvelle tentative automatique est d'éviter de relancer tous les tests. Elle ne relance que les tests qui ont échoué, ce qui permet de gagner beaucoup de temps d'exécution.
Tradefed permet également d'exécuter plusieurs fois les tests afin de détecter l'instabilité grâce à la fonctionnalité iterations (itérations). Dans ce cas, tous les tests seront relancés et le test échouera si l'une des itérations échoue.
Activer les nouvelles tentatives automatiques
La nouvelle tentative automatique est contrôlée par l'objet
RetryDecision
qui propose deux options pour activer la fonctionnalité : max-testcase-run-count
et retry-strategy.
max-testcase-run-count détermine le nombre de nouvelles tentatives ou d'itérations qui seront effectuées. Il définit une limite supérieure pour éviter les nouvelles tentatives infinies.
retry-strategy détermine la manière de réessayer. Pour en savoir plus, consultez les sections suivantes.
Désactiver les nouvelles tentatives automatiques
Utilisez l'option suivante :
--retry-strategy NO_RETRY
Réessayer après échec
Pour réessayer après un échec de test, utilisez les options suivantes :
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
La nouvelle tentative sera effectuée jusqu'à ce que le test réussisse ou que le nombre maximal de nouvelles tentatives soit atteint, selon ce qui survient en premier.
Itérations
Pour relancer les tests un certain nombre de fois, vous pouvez utiliser les options suivantes :
--retry-strategy ITERATIONS --max-testcase-run-count X
À quoi ressemblent les résultats ?
Par défaut, les outils de création de rapports sur les résultats reçoivent les résultats agrégés de toutes les tentatives.
Par exemple, un Fail et un Pass pour RETRY_ANY_FAILURE généreront un Pass agrégé, car la nouvelle tentative a permis de résoudre l'échec.
Il est possible que les outils de création de rapports reçoivent les résultats non agrégés. Pour ce faire, ils doivent étendre l' interface ISupportGranularResults qui déclare la prise en charge des résultats granulaires (non agrégés).
Détails de mise en œuvre
Pour activer la nouvelle tentative automatique afin de relancer les échecs au niveau du scénario de test, implémentez ITestFilterReceiver.
Si vous ne pouvez pas implémenter ITestFilterReceiver, vous pouvez implémenter IAutoRetriableTest pour contrôler manuellement le fonctionnement de la nouvelle tentative. InstalledInstrumentationsTest est un exemple d'implémentation de cette interface.