使用 atest 測試平台程式碼

Android Studio for Platform (ASfP) 與 atest 和 Soong 測試模組整合,因此您可以在 Linux 主機、連結裝置或 Cuttlefish 虛擬裝置上,透過 IDE 執行及偵錯平台測試。

必要條件

  • 開啟已設定 AOSP 簽出和 lunch 目標的 ASfP 專案。
  • 如要測試裝置,請連線至實體裝置,或啟動執行相符版本的 Cuttlefish 虛擬裝置。

執行及偵錯測試

您可以從 ASfP 的多個位置啟動平台測試和偵錯工作階段:

  • Android.bp 測試目標:開啟 Android.bp 檔案,然後按一下任何測試模組 (*_test 或 *_test_host) 旁邊空白邊中的「執行」:
    • 執行:適用於所有 Soong 測試模組類型 (android_test、java_test_host、cc_test、rust_test、python_test、sh_test 和 android_robolectric_test)。
    • 偵錯:適用於 android_test 模組 (使用 atest --wait-for-debugger 附加 Java 偵錯工具) 和 C++ 或 Rust 測試模組 (cc_test、cc_test_host、rust_test 和 rust_test_host,在 ASfP 內建的 LLDB 偵錯工具下啟動)。
  • 來源檔案空白處的圖示:按一下來源程式碼中測試類別或 @Test 方法旁邊的「執行」,即可執行或偵錯該特定測試。
  • 按一下滑鼠右鍵的內容選單:在測試檔案、類別、方法或 Android.bp 模組上按一下滑鼠右鍵,然後選取「Run」或「Debug」。
  • 內建 Agent (Android Studio 中的 AI):在「Agent」工具視窗中,內建 Agent 可以執行 atest 目標,在編輯程式碼後驗證變更。
  • 整合式終端機:開啟「View」>「工具視窗」>「Terminal」,直接執行 atest 指令。

智慧測試設定和偵錯

從側欄或內容選單啟動測試時,ASfP 會使用 Android.bp 模組圖表建立及設定 Soong 測試執行設定。

偵錯 android_test Java 和 Kotlin 目標

在 Android.bp 中按一下 android_test 模組旁邊的溝槽圖示,或在 Java/Kotlin JUnit 類別或 @Test 方法旁邊按一下,然後選取「Debug '<TestName>'」。ASfP 會從來源檔案溝槽中,挑選最接近的封閉式 android_test 模組 (其 srcs 包含該檔案),並將設定命名為 <module>、<module>:<SimpleClass> 或 <module>:<SimpleClass>#<method>。

ASfP 會使用 --wait-for-debugger 執行 atest,從模組的 AndroidManifest.xml 讀取目標 package 屬性,等待連結裝置上的程序,然後附加 Java 偵錯工具。

從編輯器空白邊對 android_test 方法進行偵錯

在 LLDB 下偵錯 cc_test 和 rust_test 目標

如要偵錯 C++ 或 Rust 測試模組 (cc_test、cc_test_host、rust_test 或 rust_test_host),請按一下 Android.bp 裝訂邊圖示,然後選取「Debug '<TestName>'」。ASfP 會在內建的 LLDB 偵錯工具下啟動已編譯的測試二進位檔,而不是透過 atest 執行。

設定 Soong 測試執行設定

開啟「Run」>「Edit Configurations」,然後選取「Soong Test」設定,自訂測試的建構、部署及啟動方式:

  • 模組自動完成和 Android.bp 導覽:「模組」欄位會自動完成專案中已建立索引的 Soong 測試模組。按一下欄位旁的「前往 Android.bp」,即可跳至 Android.bp 中的模組宣告。
  • 執行平台:裝置或主機 (包括 host_supported: true):ASfP 會評估模組規則及其遞移 defaults 鏈結 (host_supported、device_supported、enabled、target.android.enabled 和 target.host.enabled):
    • 雙目標測試 (cc_test 和 rust_test,搭配 host_supported: true):「裝置」和「主機」圓形按鈕 均可使用 (預設為「裝置」)。「裝置」和「主機」各自維護獨立的 LLDB 偵錯工具範本。在「裝置」和「主機」之間切換「執行於」,即可在遠端裝置 lldb-server 設定和本機主機二進位設定之間切換,同時保留在各目標上所做的自訂項目。
    • 單一目標測試:如果 C++ 或 Rust 測試只為一個環境建構 (例如僅限裝置的 cc_test 或僅限主機的 cc_test_host 或 rust_test_host),ASfP 會選取支援的目標,並停用不支援的圓形按鈕,同時顯示說明工具提示:「<module> (<ruleType>) doesn't build for the host or device.」
  • 發布前工作 (建構原生測試模組並使用 atest 部署): 根據預設,每個 Soong 測試設定都包含兩項「發布前」工作:
    • 建構原生測試模組:在啟動 LLDB 之前,建構 <module>-target (適用於裝置) 或 <module>-host (適用於主機)。
    • 使用 atest 部署:在「裝置」上偵錯時,系統會執行 atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi>,因此 Tradefed 會推送測試依附元件並執行目標準備工具,然後 LLDB 才會啟動二進位檔。將游標懸停在「使用測試部署」方塊上,即可預覽確切的 atest 指令。如果裝置上已有依附元件,請移除「Deploy with atest」(使用 atest 部署),ASfP 就只會直接推送測試二進位檔,加快疊代速度。選取「在以下裝置上執行:主機」時,ASfP 會自動略過「使用測試部署」。
  • 修改選項和偵錯工具 (LLDB 選項資訊卡):使用「修改選項」新增選用設定欄位:
    • 程式引數 (作業系統,僅限 C++ 和 Rust 測試): 偵錯時,在 --gtest_filter 或 libtest 篩選器之後,直接傳遞至 cc_test 或 rust_test 二進位檔的額外引數。
    • atest 參數 (Test):執行測試或使用「Deploy with atest」準備裝置時,傳遞至 atest 的額外標記。
    • 偵錯工具 (僅限 C++ 和 Rust 測試):當「模組」為 cc_test* 或 rust_test* 目標時顯示。切換「LLDB options」資訊卡 (例如「Stop on entry」、「Cache symbols across sessions」、「Load symbols on demand」或「With Rust visualizers」 (適用於 Rust 測試)),按一下「Reset to defaults」即可重設有效的「Device」或「Host」範本,或從「Modify options」>「Debugger」新增「Symbol directories」、「Init、Pre-run、Post-run 或 Exit commands」和「Launch JSON」(「DAP Settings」)。

Soong 測試執行設定,顯示啟動前工作、裝置或主機目標,以及 LLDB 選項

查看測試結果

測試執行進度、通過或失敗狀態、堆疊追蹤記錄和裝置記錄,都會即時顯示在 ASfP 的「Run」或「Debug」工具視窗中。

測試訣竅

  • 執行目標測試:從編輯器空白邊測試個別方法,不必執行整個測試套件。
  • 使用 Cuttlefish 快照:在 Cuttlefish 虛擬裝置上執行裝置測試時,請使用快照在執行之間還原裝置的清空狀態。
  • 檢查 Soong 建構記錄:如果測試在執行前無法編譯,請檢查 Soong 工具視窗中的編譯器診斷資訊。