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