使用套件重试

一个套件往往包含几个测试模块,并且可以达到相当大的测试语料库大小。例如, 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的组合中加载数据,以准备重试调用。