测试可能会因任何原因而失败,有时只需重新运行测试就足以使其再次通过(由于不稳定性,例如底层基础架构中的问题)。您可以将 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 是该接口的示例实现。