系统状态检查器 (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
接口,该接口提供两个主要方法 preExecutionCheck
和 postExecutionCheck
,它们在每个模块执行之前和之后运行。
检查器可以只实现这两个方法中的一个,或者如果需要在模块之前检查状态并将其与模块之后的状态进行比较,则可以实现这两个方法。
在 Tradefed 中存在一些示例实现。建议每个实现都专注于单个检查,以提高可重用性。例如,SystemServerStatusCheck
检查在测试套件执行期间设备上的 system_server
进程是否重启。在 postExecutionCheck
中,它调用在 NativeDevice
中定义的 deviceSoftRestarted
,以检查 system_server
进程是否重启。
每个操作都返回 StatusCheckerResult
,这使 harness 决定是否应捕获其他信息,例如错误报告。
它们在 CTS 中定义在哪里?
CTS 系统状态检查器在 /test/suite_harness/tools/cts-tradefed/res/config/cts-system-checkers.xml 中定义。
如何查找检查器故障
默认情况下,系统检查器故障仅显示在日志中,并作为为调用捕获的错误报告,名称格式如下:bugreport-checker-post-module-<module name>.zip
。
这使您可以找出在哪个模块之后生成了错误报告。
可以通过将 --report-system-checkers
选项设置为 true
,使系统检查器本身报告为测试失败。这会导致测试运行显示为失败,失败的原因是状态检查器的特定检查。