套件往往包含多个测试模块,测试语料库也会变得相当大。例如,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
的组合加载数据以准备重试调用。