テストの自動再試行

テストは、なんらかの理由で不合格になることがあります。場合によっては、テストを再実行するだけで合格することもあります(基礎のインフラストラクチャの問題などによる脆弱性のため)。Tradefed では、再試行を自動的に行うように設定できます。

自動再試行の中核は、テストのすべては再実行しないようにすることです。不合格になったテストのみが再実行され、実行時間が大幅に短縮されます。

また Tradefed は、反復機能によって脆弱性を検出するために、テストを複数回実行することもサポートしています。この場合、すべてのテストが再実行され、いずれかの反復が不合格になるとテストは不合格になります。

機能を有効にする

自動再試行は RetryDecision オブジェクトによって制御され、この機能を有効にする 2 つのオプション(max-testcase-run-countretry-strategy)が用意されています。

max-testcase-run-count は、試行される再試行または反復の回数を制御します。再試行し続けないように、上限を設定します。retry-strategy は、再試行の方法を決定します。詳細については、次のセクションをご覧ください。

無効にする

次のオプションを使用します。

--retry-strategy NO_RETRY

不合格の再試行

テストの不合格を再試行するには、次のオプションを使用します。

--retry-strategy RETRY_ANY_FAILURE --max-testcase-run-count X

これにより、合格するか、再試行の最大回数に達するまで(いずれか早い方)、不合格を再試行します。

反復

テストを何度も再実行するには、次のオプションを使用できます。

--retry-strategy ITERATIONS --max-testcase-run-count X

結果の表示

デフォルトで、結果レポーターはすべての試行の集計結果を受け取ります。

たとえば、RETRY_ANY_FAILUREFailPass は、再試行によって不合格がクリアされるため、Pass が集計されます。

レポーターは、集計されていない結果を受け取ることができます。これを行うには、詳細な(集計されていない)結果のサポートを宣言する ISupportGranularResults インターフェースを拡張する必要があります。

実装の詳細

テストケース レベルで障害の自動再試行を有効にするには、ITestFilterReceiver を実装します。

ITestFilterReceiver を実装できない場合は、IAutoRetriableTest を実装して再実行の動作を制御します。 InstalledInstrumentationsTest はそのインターフェースの実装例です。