Eine Suite enthält in der Regel mehrere Testmodule und kann eine ziemlich große Testkorpusgröße erreichen. Die Android Compatibility Test Suite (CTS) umfasst beispielsweise Hunderte von Modulen und Hunderttausende Testläufe.
Aufgrund einer schlechten Isolation oder eines schlechten Zustands der Geräte kann es passieren, dass eine große Anzahl von Tests fehlschlägt.
Die Funktion zum Wiederholen von Suiten ist für diese Fälle gedacht: Sie können damit nur die fehlgeschlagenen Tests anstelle der gesamten Suiten wiederholen, um Unzuverlässigkeit 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, dass ein echtes Problem vorliegt.
Suite-Wiederholung implementieren
Zum Wiederholen von Ergebnissen werden die vorherigen Ergebnisse gelesen und der vorherige Aufruf noch einmal ausgeführt.
Die Hauptoberfläche für den Wiederholungsversuch ist ITestSuiteResultLoader
, mit der Sie ein vorheriges Ergebnis und die vorherige Befehlszeile laden können.
RetryRescheduler
verwendet diese Informationen, um den vorherigen Befehl neu zu erstellen und einige Filter auszufüllen, um nur die zuvor fehlgeschlagenen oder nicht ausgeführten Tests noch einmal auszuführen.
Beispiel für einen Suite-Wiederversuch: CTS
Die Konfiguration für Wiederholungen in CTS ist:
<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 würde folgendermaßen erfolgen:
cts-tradefed run retry --retry <session>
Die Sitzung wird gefunden, indem die vorherigen Ergebnisse in der CTS-Konsole aufgelistet 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 ursprüngliche Befehl wird genau so neu geladen und mit zusätzlichen Filtern ausgeführt. Das bedeutet, dass Optionen, die im ursprünglichen Befehl enthalten waren, auch beim Wiederholungsversuch verwendet werden.
Beispiel:
cts-tradefed run cts-dev -m CtsGestureTestCases
Der Wiederholungsversuch des Befehls oben ist immer an CtsGestureTestCases
gebunden, da wir einen Befehl wiederholen, der nur diesen Parameter enthält.
Wiederholung für CTS-Suite konfigurieren
Damit der erneute Versuch 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" />
Dieser muss der XML-Konfiguration des Hauptbefehls hinzugefügt werden. Dadurch wird im Ergebnisordner eine test-record.pb
-Datei erstellt.
Bei der CTS-Wiederholung werden dann Daten aus einer Kombination aus test-record.pb
und der vorhandenen test_result.xml
geladen, um die Wiederholung aufzurufen.