Ein Test kann aus verschiedenen Gründen fehlschlagen. Manchmal reicht es aus, den Test noch einmal auszuführen, damit er erfolgreich ist (z. B. aufgrund von Problemen in der zugrunde liegenden Infrastruktur). Sie können Tradefed so konfigurieren, dass Wiederholungsversuche automatisch durchgeführt werden.
Der Hauptzweck der automatischen Wiederholung besteht darin, zu vermeiden, dass alle Tests noch einmal ausgeführt werden. Stattdessen werden nur die fehlgeschlagenen Tests noch einmal ausgeführt, was zu erheblichen Einsparungen bei der Ausführungszeit führt.
Tradefed unterstützt außerdem das mehrfache Ausführen von Tests, um instabile Vorgänge über die Iterationen-Funktion zu erkennen. In diesem Fall werden alle Tests noch einmal ausgeführt und der Test schlägt fehl, wenn eine der Iterationen fehlschlägt.
Automatische Wiederholung aktivieren
Die automatische Wiederholung wird über das RetryDecision-Objekt gesteuert. Es bietet zwei Optionen zum Aktivieren der Funktion: max-testcase-run-count
und retry-strategy
.
max-testcase-run-count
bestimmt die Anzahl der Wiederholungen oder Iterationen, die versucht werden. Es wird eine Obergrenze festgelegt, um endlose Wiederholungen zu vermeiden.
retry-strategy
bestimmt, wie der Vorgang wiederholt wird. Weitere Informationen finden Sie in den folgenden Abschnitten.
Automatische Wiederholung deaktivieren
Verwenden Sie die folgende Option:
--retry-strategy NO_RETRY
Fehlgeschlagene Wiederholungsversuche
Sie haben folgende Möglichkeiten, fehlgeschlagene Tests noch einmal auszuführen:
--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X
Der Vorgang wird wiederholt, bis der Fehler nicht mehr auftritt oder die maximale Anzahl von Wiederholungen erreicht ist, je nachdem, was zuerst eintritt.
Iterationen
Wenn Sie Tests für eine bestimmte Zeitspanne noch einmal ausführen möchten, können Sie die folgenden Optionen verwenden:
--retry-strategy ITERATIONS --max-testcase-run-count X
Wie sehen die Ergebnisse aus?
Ergebnisreporter erhalten standardmäßig aggregierte Ergebnisse für alle Versuche.
Beispiel: Ein Fail
und ein Pass
für RETRY_ANY_FAILURE
führen zu einem aggregierten Pass
, da der Fehler beim erneuten Versuch behoben werden konnte.
Die Reporter können die nicht aggregierten Ergebnisse erhalten. Dazu muss die ISupportGranularResults-Oberfläche erweitert werden, die die Unterstützung der detaillierten (nicht aggregierten) Ergebnisse deklariert.
Implementierungsdetails
Wenn Sie die automatische Wiederholung aktivieren möchten, um Fehler auf Testfallebene noch einmal auszuführen, implementieren Sie ITestFilterReceiver.
Wenn Sie ITestFilterReceiver nicht implementieren können, können Sie IAutoRetriableTest implementieren, um die Wiederholung manuell zu steuern. InstalledInstrumentationsTest ist eine Beispielimplementierung dieser Schnittstelle.