スイートの再試行を使用する

スイートには複数のテスト モジュールが含まれる傾向があり、極めて大きなテストコーパス サイズに達する可能性があります。たとえば Android 互換性テストスイート(CTS)には、数百のモジュールと数十万のテストケースが含まれています。

分離が不十分であると、またはデバイスが不良な状態になると、大量のテストが不合格になる可能性があります。

スイートの再試行機能は、そのようなケースに対処することを目的としています。脆弱性と不十分な分離を排除するために、スイート全体ではなく不合格のみを再試行できます。テストが一貫して不合格になる場合は再試行も不合格になり、本当の問題があるということが強く示されます。

スイートの再試行を実装する

結果の再試行には、前の結果の読み取りと、前の呼び出しの再実行が含まれます。

再試行を行う主なインターフェースは ITestSuiteResultLoader であり、前の結果と前のコマンドラインを読み込めます。

次に RetryRescheduler は、この情報を使用して前のコマンドを再作成し、前の不合格のみ、または実行されなかったテストのみを再実行するために、フィルタをいくつか設定します。

スイートの再試行の例: CTS

CTS での再試行の設定は次のとおりです。

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

これは、拡張するほとんどのスイート(VTS など)に適用されます。

次のようにして呼び出されます。

cts-tradefed run retry --retry <session>

セッションは、CTS コンソールで前の結果をリストすることで表示されます。

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

元のコマンドとまったく同じコマンドが再読み込みされ、追加のフィルタで再実行されます。つまり、元のコマンドにオプションがいくつか含まれている場合、それらも再試行の一部になります。

次に例を示します。

cts-tradefed run cts-dev -m CtsGestureTestCases

上記の再試行は、常に CtsGestureTestCases に制限されます(それのみを含むコマンドを再試行しているため)。

CTS スタイル スイートの再試行を構成する

再試行を機能させるには、前の結果を proto 形式でエクスポートする必要があります。次の行を追加する必要があります。

<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />

これはメインのコマンドの XML 構成に追加する必要があります。これにより、test-record.pb ファイルが結果フォルダに作成されます。

すると、CTS 再試行が test-record.pb と既存の test_result.xml の組み合わせからデータを読み込んで、再試行の呼び出しを準備します。