テストは何らかの理由で失敗する可能性があり、単純にテストを再実行するだけで再び合格する場合があります (基盤となるインフラストラクチャの問題などによる脆弱性のため)。再試行を自動的に行うように Tradefed を構成できます。
自動再試行の核心は、すべてのテストの再実行を回避することです。失敗したテストのみを再実行するため、実行時間が大幅に節約されます。
Tradefed は、反復機能を介してフレークネスを検出するために、テストを複数回実行することもサポートしています。この場合、すべてのテストが再実行され、いずれかの反復が失敗するとテストは失敗します。
機能を有効にする
自動再試行は、機能を有効にするための 2 つのオプションmax-testcase-run-count
とretry-strategy
を提供するRetryDecision オブジェクトを介して制御されます。
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
結果はどのように見えますか?
デフォルトでは、結果レポーターはすべての試行の集計結果を受け取ります。
例: Fail
とRETRY_ANY_FAILURE
のPass
は、再試行によって失敗が解消されたため、集計されたPass
になります。
報告者は集計されていない結果を受け取ることができます。そのためには、詳細な (非集計) 結果のサポートを宣言するISupportGranularResults インターフェイスを拡張する必要があります。
実装の詳細
自動再試行を有効にしてテスト ケース レベルで失敗を再実行するには、 ITestFilterReceiverを実装します。
ITestFilterReceiver を実装できない場合は、 IAutoRetriableTestを実装して、再実行の動作を手動で制御できます。 InstalledInstrumentationsTestは、そのインターフェイスの実装例です。