自动重试

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