Suite-Wiederholung verwenden

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.