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 von Testfällen.
Aufgrund einer schlechten Isolation oder eines schlechten Zustands der Geräte kann es passieren, dass viele Tests fehlschlagen.
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
Beim Wiederholen der Ergebnisse werden die vorherigen Ergebnisse gelesen und die vorherige Aufrufung 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>
Das gilt für die meisten Suites, die sie erweitern, z. B. VTS.
Es wird mit folgendem Code aufgerufen:
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 mit zusätzlichen Filtern noch einmal geladen und 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 von test-record.pb
und der vorhandenen test_result.xml
geladen, um die Wiederholung aufzurufen.