テストは、なんらかの理由で不合格になることがあります。場合によっては、テストを再実行するだけで合格することもあります(基礎のインフラストラクチャの問題などによる脆弱性のため)。Tradefed では、再試行を自動的に行うように設定できます。
自動再試行の中核は、テストのすべては再実行しないようにすることです。不合格になったテストのみが再実行され、実行時間が大幅に短縮されます。
また Tradefed は、反復機能によって脆弱性を検出するために、テストを複数回実行することもサポートしています。この場合、すべてのテストが再実行され、いずれかの反復が不合格になるとテストは不合格になります。
機能を有効にする
自動再試行は RetryDecision オブジェクトによって制御され、この機能を有効にする 2 つのオプション(max-testcase-run-count
と retry-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_FAILURE
の Fail
と Pass
は、再試行によって不合格がクリアされるため、Pass
が集計されます。
レポーターは、集計されていない結果を受け取ることができます。これを行うには、詳細な(集計されていない)結果のサポートを宣言する ISupportGranularResults インターフェースを拡張する必要があります。
実装の詳細
テストケース レベルで障害の自動再試行を有効にするには、ITestFilterReceiver を実装します。
ITestFilterReceiver を実装できない場合は、IAutoRetriableTest を実装して再実行の動作を制御します。 InstalledInstrumentationsTest はそのインターフェースの実装例です。