使用套件重试

一个套件往往包含多个测试模块,并且可能达到相当大的测试语料库大小。例如,Android 兼容性测试套件 (CTS) 包含数百个模块和数十万个测试用例。

由于隔离性差或设备进入不良状态,可能会导致大量测试失败。

套件重试功能旨在解决这些情况:它允许您仅重试失败的测试,而不是重试整个套件,以便排除偶发性和隔离性差的问题。如果测试持续失败,则重试也会失败;并且您会获得更强烈的信号,表明存在实际问题。

实现套件重试

结果重试涉及读取先前的结果并重新运行先前的调用。

驱动重试的主要接口是 ITestSuiteResultLoader,它允许您加载先前的结果和先前的命令行。

RetryRescheduler 然后使用此信息重新创建先前的命令,并填充一些过滤器,以便仅重新运行先前的失败或未执行的测试。

套件重试示例:CTS

CTS 中的重试配置为

<configuration description="Runs a retry of a previous CTS session.">
    <object type="previous_loader" class="com.android.compatibility.common.tradefed.result.suite.PreviousResultLoader" />
    <test class="com.android.tradefed.testtype.suite.retry.RetryRescheduler" />

    <logger class="com.android.tradefed.log.FileLogger">
        <option name="log-level-display" value="WARN" />
    </logger>
</configuration>

这适用于扩展它的绝大多数套件,例如 VTS

它将使用以下命令调用:

cts-tradefed run retry --retry <session>

会话将通过列出 CTS 控制台中的先前结果来找到

cts-tf > l r
Session  Pass  Fail  Modules Complete  Result Directory     Test Plan  Device serial(s)  Build ID   Product
0        2092  30    148 of 999        2018.10.29_14.12.57  cts        [serial]          P          Pixel

确切的原始命令将被重新加载并使用额外的过滤器重新运行。这意味着如果您的原始命令包含一些选项,它们也属于重试的一部分。

例如

cts-tradefed run cts-dev -m CtsGestureTestCases

上述重试始终绑定到 CtsGestureTestCases,因为我们正在重试仅涉及它的命令。

为 CTS 样式套件配置重试

为了使重试工作,需要以 proto 格式导出先前的结果。需要添加以下内容

<result_reporter class="com.android.compatibility.common.tradefed.result.suite.CompatibilityProtoResultReporter" />

这需要添加到主命令的 XML 配置中,它会导致在结果文件夹中创建一个 test-record.pb 文件。

然后,CTS 重试从 test-record.pb 和现有 test_result.xml 的组合中加载数据,以准备重试调用。