檢查系統狀態

系統狀態檢查器 (SSC) 是在套件層級設定,並在各個模組之間執行。這些檢查項目會執行檢查,判斷模組是否已變更,且未還原某些指定狀態,例如變更系統屬性值。

SSC 主要用於確保模組編寫者不會忘記在測試後清理;但如果他們忘記,請提供追蹤記錄,以便解決問題。

次要用途則是盡可能還原原始狀態,例如在 Keyguard 處於開啟狀態時將其關閉。

系統狀態檢查器 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" />

在 Tradefed 設定 XML 的 system_checker 標記下方定義 SSC。

實作

每個 SSC 都必須實作 ISystemStatusChecker 介面,該介面提供兩個主要方法 preExecutionCheckpostExecutionCheck,分別在每個模組執行前後執行。

檢查器可以只實作這兩者之一,如果需要檢查模組前的狀態,並將其與模組後的狀態進行比較,則可以實作這兩者。

Tradefed 中包含多個實作範例。建議每個實作項目都專注於單一檢查,以提高重複使用性。舉例來說,SystemServerStatusCheck 會檢查在執行測試套件期間,裝置上是否重新啟動 system_server 程序。在 postExecutionCheck 中,它會呼叫 deviceSoftRestarted,該函式在 NativeDevice 中定義,用於檢查 system_server 程序是否已重新啟動。

每個作業都會傳回 StatusCheckerResult,讓測試套件決定是否應擷取其他資訊 (例如錯誤報告)。

這些定義在 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,讓系統檢查器回報本身為測試失敗。這會導致測試執行作業顯示為失敗,失敗原因為狀態檢查器的特定檢查。