Nouvelle tentative de test automatique

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

Le principe de la nouvelle tentative automatique consiste à éviter de réexécuter tous les tests. Seuls les tests ayant échoué sont réexécutés, ce qui permet de réduire considérablement le temps d'exécution.

Tradefed permet également d'exécuter des tests plusieurs fois afin de détecter les failles via la fonctionnalité d'itérations. 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 via l'objet RetryDecision, qui fournit 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 à effectuer. Elle définit une limite supérieure pour éviter de réessayer indéfiniment. retry-strategy détermine la méthode de nouvelle tentative. Pour en savoir plus, consultez les sections suivantes.

Désactiver les nouvelles tentatives automatiques

Utilisez l'option suivante:

--retry-strategy NO_RETRY

Échecs de nouvelle tentative

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

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

Cette opération réessaie l'échec jusqu'à ce qu'il réussisse ou jusqu'à ce que le nombre maximal de nouvelles tentatives soit atteint, selon la première échéance atteinte.

Itérations

Pour réexécuter des tests un certain nombre de fois, vous pouvez utiliser les options suivantes:

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

Comment les résultats s'affichent-ils ?

Par défaut, les rapporteurs de résultats reçoivent les résultats cumulés de toutes les tentatives.

Par exemple, un Fail et un Pass pour RETRY_ANY_FAILURE génèrent un Pass agrégé, car la nouvelle tentative a réussi à effacer l'échec.

Les reporters peuvent recevoir des 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 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 nouvelle exécution. InstalledInstrumentationsTest est un exemple d'implémentation de cette interface.