使用套件重试

套件往往包含多个测试模块,测试语料库也会变得相当大。例如,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>

这适用于扩展 CTS 的大多数套件,例如 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 的组合加载数据以准备重试调用。