检查系统状态

系统状态检查工具 (SSC) 在套件级配置中定义,并在每个模块之间运行。它们会执行检查以确定模块是否更改了某些状态但未恢复这些状态,例如更改了系统属性值。

SSC 主要用于确保模块编写者不会在测试后忘记清理;但是,如果他们忘记了清理,该工具会提供跟踪记录,以方便解决问题。

其次要用途是尽可能恢复原始状态,例如在忘了关掉锁屏设置时将其关闭。

系统状态检查工具 XML 定义

<system_checker class="com.android.tradefed.suite.checker.KeyguardStatusChecker" />
<system_checker class="com.android.tradefed.suite.checker.LeakedThreadStatusChecker" />
<system_checker class="com.android.tradefed.suite.checker.SystemServerStatusChecker" />

SSC 在 Tradefed 配置 XML 中的 system_checker 标记下定义。

实现

每个 SSC 都必须实现 ISystemStatusChecker 接口,该接口提供了两种主要方法,即 preExecutionCheckpostExecutionCheck,它们分别在每个模块执行之前和之后运行。

检查工具可以仅实现这两种方法之一,如果需要检查模块执行之前的状态并将其与模块执行之后的状态进行比较,也可以同时实现这两种方法。

Tradefed 中存在多个实现示例。建议每个实现专注于一项检查,以提高可重用性。例如,SystemServerStatusCheck 将检查 system_server 进程是否会在测试套件执行期间在设备上重启。在 postExecutionCheck 中,它会调用在 NativeDevice 中定义的 deviceSoftRestarted 以检查 system_server 进程是否已重启。

每项操作都会返回 StatusCheckerResult,这使自动化测试框架能够决定是否应捕获附加信息,如 bug 报告。

它们在 CTS 中的定义位置在哪里?

CTS 系统状态检查工具的定义位置如下:/test/suite_harness/tools/cts-tradefed/res/config/cts-system-checkers.xml

如何查找检查工具发现的故障

默认情况下,系统检查工具故障仅显示在日志中,并会捕获为相应调用的 bug 报告,其名称遵循以下格式:bugreport-checker-post-module-<module name>.zip

根据此名称,您可以弄清是在哪个模块后生成的 bug 报告。

通过将 --report-system-checkers 选项设置为 true,可以将系统检查工具本身报告为测试失败。这将导致测试运行显示为失败,并且失败的原因是状态检查工具的特定检查。