Nouvelle tentative de test automatique

Un test peut échouer pour n'importe quelle raison. Parfois, il suffit de le relancer pour qu'il réussisse à nouveau (en raison d'une instabilité, par exemple due à des problèmes dans l'infrastructure sous-jacente). Vous pouvez configurer Tradefed pour qu'il effectue automatiquement la nouvelle tentative.

L'intérêt principal de la réexécution automatique est d'éviter de relancer tous les tests. Elle ne relance que les tests ayant échoué, ce qui permet de gagner beaucoup de temps d'exécution.

Tradefed permet également d'exécuter des tests plusieurs fois afin de détecter les instabilités grâce à la fonctionnalité iterations. Dans ce cas, tous les tests seront réexécuté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. Elle définit une limite supérieure pour éviter les tentatives indéfinies. 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 en cas d'échec

Pour réessayer les échecs de test, utilisez les options suivantes :

--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X

La tâche échouée sera relancée jusqu'à ce qu'elle réussisse ou que le nombre maximal de tentatives soit atteint, selon la première échéance atteinte.

Itérations

Pour réexécuter les tests plusieurs fois, vous pouvez utiliser les options suivantes :

--retry-strategy ITERATIONS --max-testcase-run-count X

À quoi ressemblent les résultats ?

Par défaut, les responsables des résultats recevront 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 responsables des rapports reçoivent les résultats non agrégés. Pour ce faire, ils doivent étendre l'interface ISupportGranularResults qui déclare la compatibilité avec les résultats précis (non agrégés).

Détails de l'implémentation

Pour activer la réexécution automatique des échecs au niveau du cas 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 réexécution. InstalledInstrumentationsTest est un exemple d'implémentation de cette interface.