自动重新运行测试

测试可能会因任何原因而失败,有时只需重新运行测试就足以使其再次通过(由于不稳定性,例如底层基础架构中的问题)。您可以将 Tradefed 配置为自动重试。

自动重试的核心是避免重新运行所有测试;它仅会重新运行失败的测试,从而大大缩短执行时间。

Tradefed 还支持多次运行测试,以便通过迭代功能检测不稳定性。在这种情况下,系统将重新运行所有测试,如果任何迭代失败了,测试将失败。

启用自动重试

自动重试通过 RetryDecision 对象控制,该对象提供两个选项来启用该功能: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 是该接口的示例实现。