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 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.