测试可能会因任何原因而失败,有时只需重新运行测试就足以使其再次通过(由于不稳定性,例如来自底层基础架构的问题)。您可以将 Tradefed 配置为自动执行重试。
自动重试的核心是避免重新运行所有测试;它仅重新运行失败的测试,从而大大节省了执行时间。
Tradefed 还支持多次运行测试,以便通过 iterations 功能检测不稳定性。在这种情况下,所有测试都将重新运行,如果任何迭代失败,则测试将失败。
启用自动重试
自动重试通过 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
结果看起来如何?
默认情况下,结果报告器将接收所有尝试的聚合结果。
例如:Fail
和 Pass
用于 RETRY_ANY_FAILURE
将导致聚合的 Pass
,因为重试成功清除了失败。
报告器可以接收非聚合结果。为此,他们需要扩展 ISupportGranularResults 接口,该接口声明支持粒度(非聚合)结果。
实现细节
要启用自动重试以在测试用例级别重新运行失败,请实现 ITestFilterReceiver。
如果您无法实现 ITestFilterReceiver,则可以实现 IAutoRetriableTest 以手动控制重新运行的操作方式。InstalledInstrumentationsTest 是该接口的示例实现。