测试可能因任何原因失败,有时只需重新运行测试就足以使其再次通过(由于脆弱性,例如底层基础设施中的问题)。您可以将 Tradefed 配置为自动进行重试。
自动重试的核心是避免重新运行所有的测试;它只重新运行失败的测试,从而大大节省了执行时间。
Tradefed 还支持多次运行测试,以便通过迭代功能检测片状。在这种情况下,所有测试都将重新运行,如果任何迭代失败,则测试将失败。
启用该功能
自动重试通过RetryDecision 对象控制,该对象提供了两个选项来启用该功能: 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是该接口的示例实现。