控制測試何時進入和退出汽車模式—無需重新啟動
測試一款汽車應用不僅僅是測試投影螢幕,而是要測試完整的使用者體驗。
當透過車載投影介面測試行動應用時,其結構與標準移動測試有所不同。設備會進入投影狀態-與虛擬主機保持持續連接,從而將螢幕控制權移交給汽車的顯示系統。
這就造成了標準行動自動化測試中不存在的測試問題。
大多數汽車應用程式都要求使用者已登入、套用處於已知狀態或滿足特定資料條件後才能開始投影。但如果設備在會話開始時就進入投影模式,則沒有時間事先進行這些設定。
當測試結束時設備仍處於投影模式時(這種情況在自動化環境中經常發生),下一次測試將繼承該狀態。
團隊目前使用的變通方法無法在持續整合/持續交付 (CI/CD) 環境中擴展。它們引入了手動步驟、不一致的行為,以及更難維護的測試基礎設施。
真正需要改變的是什麼
核心要求很簡單:團隊需要控制測試會話期間投影的開始和停止時間,而不僅僅是控制投影在整個會話期間開啟還是關閉。
這將開啟兩件事:
投影前的前提條件。 在正常的裝置環境下執行應用程式重置、登入和資料設定。然後在套用處於正確狀態後啟動投影。
投影後清除設備狀態。 在測試結束時明確停止投影,以便在池中任何裝置上的下一次測試都能從可預測的基線開始。
這些並非高深的要求。它們與所有 CI/CD 管線針對其他類型測試所做的假設相同。問題在於,汽車預測工具不支持這些假設。
因此,我們現在引入了兩個與 Appium 相容的命令——automotive.start 和 automotive.stop——使團隊能夠在運行的測試會話中的任何時間點以編程方式控制 Android Auto 和 iOS CarPlay 投影狀態。
命令的作用
`automotive.start` 和 `automotive.stop` 直接在您的 Appium 測試腳本中呼叫。 `automotive.start` 會啟動已連接車載顯示器上的投影,`automotive.stop` 則會結束投影狀態,並將會話傳回標準設備上下文。這兩個命令均支援 Android Auto 和 iOS CarPlay。
測試現在可以這樣進行:
- 在裝置上開啟應用程式
- 登錄,設定資料條件,導航至右側螢幕
- 啟動投影(汽車.啟動)
- 在車載螢幕上運行自動步驟
- 停止投影(汽車.停止)
- 驗證非汽車行為
以下是它在程序中的可能表現形式:
# Pre-condition: launch app in standard device context
driver.activate_app('com.example.automotiveapp')
login(driver) # run login flow normally
navigate_to_map_screen(driver) # set expected app state
# Enter automotive projection (Android Auto / CarPlay)
driver.execute_script('automotive.start')
# Interact with in-car display
driver.find_element(By.ID, 'com.example:id/nav_button').click()
assert_route_displayed(driver)
# Exit projection — device returns to standard context
driver.execute_script('automotive.stop')
# Continue validating non-automotive behavior
assert_app_state_preserved(driver)
每個投影片段都會產生單獨的視頻,並作為測試報告附件上傳。單次測試支援多個啟動/停止循環,每個循環都會單獨錄製。
其結果是實現了汽車測試覆蓋率,該覆蓋率可以融入標準的 CI/CD 管道,而無需特殊的設備處理、隔離環境或在運行之間進行人工幹預。
這將解鎖什麼?
前提自由。 現在,任何需要在投影之前進行的應用程式設定都可以在投影之前完成——在同一會話中,無需任何變通方法。
CI/CD 可靠性。 每個測試都管理自己的投影狀態,不依賴前一個測試留下的任何資訊。在共享設備和雲端設備池中都能穩定運作。
分段影片。 每次啟動/停止循環都會產生單獨的視訊錄影,並上傳為測試報告附件。如果測試運行多個投影循環,則每個循環都會產生單獨的錄影以供檢視。
多周期療程。 一次測試可以多次進入和退出汽車投影模式——這對於測試跨上下文切換的行為非常有用。
Android Auto 和 iOS CarPlay 均受支援。在同一個 Appium 測試腳本中,兩個平台上的指令執行方式相同。
對於已經投入資源進行連網汽車應用自動化測試的團隊來說,automotive.start 和 automotive.stop 彌補了最後一個缺口:以往的測試狀態都是在測試之外管理的。現在,它像管線中的其他所有環節一樣,在測試內部進行管理。
準備 探索汽車測試?