Eine Suite enthält in der Regel mehrere Testmodule und kann einen sehr großen Testkorpus umfassen. Die Android Compatibility Test Suite (CTS) umfasst beispielsweise Hunderte von Modulen und Hunderttausende von Testläufen.
Es kann vorkommen, dass eine große Anzahl von Tests aufgrund einer schlechten Isolation oder aufgrund von Geräten, die in einen schlechten Zustand geraten, fehlschlägt.
Die Funktion zum Wiederholen von Testläufen in der Suite soll diese Fälle abdecken. Damit können Sie nur die fehlgeschlagenen Testläufe und nicht die vollständigen Suiten wiederholen, um Flakiness und schlechte Isolation auszuschließen. Wenn ein Test immer wieder fehlschlägt, schlägt auch der Wiederholungsversuch fehl. Sie erhalten dann ein viel stärkeres Signal dafür, dass ein echtes Problem vorliegt.
Suite-Wiederholung implementieren
Beim Wiederholen von Ergebnissen werden die vorherigen Ergebnisse gelesen und der vorherige Aufruf wird noch einmal ausgeführt.
Die Hauptschnittstelle für den Wiederholungsversuch ist ITestSuiteResultLoader
. Damit können Sie ein vorheriges Ergebnis und die vorherige Befehlszeile laden.
RetryRescheduler
verwendet diese Informationen dann, um den vorherigen Befehl neu zu erstellen und einige Filter zu füllen, damit nur die vorherigen Fehler oder nicht ausgeführten Tests noch einmal ausgeführt werden.
Beispiel für das erneute Ausführen einer Suite: CTS
Die Konfiguration für Wiederholungsversuche im CTS lautet:
<configuration description="Runs a retry of a previous CTS session.">
<object type="previous_loader" class="com.android.compatibility.common.tradefed.result.suite.PreviousResultLoader" />
<test class="com.android.tradefed.testtype.suite.retry.RetryRescheduler" />
<logger class="com.android.tradefed.log.FileLogger">
<option name="log-level-display" value="WARN" />
</logger>
</configuration>
Dies gilt für die meisten Suiten, die sie erweitern, z. B. VTS.
Der Aufruf erfolgt mit:
cts-tradefed run retry --retry <session>
Die Sitzung wird gefunden, indem die vorherigen Ergebnisse in der CTS-Konsole aufgeführt werden:
cts-tf > l r
Session Pass Fail Modules Complete Result Directory Test Plan Device serial(s) Build ID Product
0 2092 30 148 of 999 2018.10.29_14.12.57 cts [serial] P Pixel
Der genaue ursprüngliche Befehl wird neu geladen und mit zusätzlichen Filtern ausgeführt. Wenn Ihr ursprünglicher Befehl Optionen enthielt, sind diese auch Teil des Wiederholungsversuchs.
Beispiel:
cts-tradefed run cts-dev -m CtsGestureTestCases
Der Wiederholungsversuch des oben genannten Befehls ist immer an CtsGestureTestCases
gebunden, da wir einen Befehl wiederholen, der nur dieses Gerät betrifft.
Wiederholung für CTS-Suite konfigurieren
Damit der Wiederholungsversuch funktioniert, müssen die vorherigen Ergebnisse im Proto-Format exportiert werden. Folgendes muss hinzugefügt werden:
<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />
Dies muss der XML-Konfiguration des Hauptbefehls hinzugefügt werden. Dadurch wird im Ergebnisordner eine test-record.pb
-Datei erstellt.
Beim CTS-Wiederholungsversuch werden dann Daten aus einer Kombination aus test-record.pb
und dem vorhandenen test_result.xml
geladen, um den Wiederholungsaufruf vorzubereiten.