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

スイートには複数のテスト モジュールが含まれる傾向があり、極めて大きなテストコーパス サイズに達する可能性があります。たとえば 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 の組み合わせからデータを読み込み、再試行の呼び出しを準備します。