Automatischer Testwiederholungsversuch

Ein Test kann aus beliebigen Gründen fehlschlagen. Manchmal reicht es aus, den Test einfach noch einmal auszuführen, damit er wieder bestanden wird (z. B. aufgrund von Instabilität, etwa durch Probleme in der zugrunde liegenden Infrastruktur). Sie können Tradefed so konfigurieren, dass der Wiederholungsversuch automatisch durchgeführt wird.

Beim automatischen Wiederholen von Tests werden nicht alle Tests noch einmal ausgeführt, sondern nur die fehlgeschlagenen. Das führt zu einer erheblichen Zeitersparnis.

Tradefed unterstützt auch das mehrmalige Ausführen von Tests, um Flakiness über die Funktion iterations zu erkennen. In diesem Fall werden alle Tests noch einmal ausgeführt. Der Test schlägt fehl, wenn eine der Iterationen fehlschlägt.

Automatische Wiederholung aktivieren

Der automatische Wiederholungsversuch wird über das RetryDecision-Objekt gesteuert, das zwei Optionen zum Aktivieren des Features bietet: max-testcase-run-count und retry-strategy.

max-testcase-run-count bestimmt die Anzahl der Wiederholungen oder Iterationen, die versucht werden. Damit wird eine Obergrenze festgelegt, um zu verhindern, dass die Wiederholung unendlich oft erfolgt. 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

Fehler bei Wiederholungsversuchen

Verwenden Sie die folgenden Optionen, um fehlgeschlagene Tests noch einmal auszuführen:

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

Der Fehler wird so lange wiederholt, bis er behoben ist oder die maximale Anzahl von Wiederholungen erreicht ist, je nachdem, was zuerst eintritt.

Iterationen

Um Tests mehrmals auszuführen, 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 aller Versuche.

Beispiel: Ein Fail und ein Pass für RETRY_ANY_FAILURE führen zu einem aggregierten Pass, da der Fehler durch den Wiederholungsversuch behoben wurde.

Es ist möglich, dass Reporter die nicht aggregierten Ergebnisse erhalten. Dazu müssen sie die ISupportGranularResults-Schnittstelle erweitern, die die Unterstützung für die detaillierten (nicht aggregierten) Ergebnisse deklariert.

Details zur Implementierung

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 manuell zu steuern, wie der erneute Lauf funktioniert. InstalledInstrumentationsTest ist eine Beispielimplementierung dieser Schnittstelle.