跳至內容

應用程式套件快取

Appium 的基本驅動程式提供一項功能,可快取提供的應用程式建置,例如,作為 app 功能值或類似於 installApp 的端點。本文說明常見的快取原則,以便您可以建立效能更佳且更有效率的測試套件執行策略。

為何需要快取

行動應用程式套件的大小可能達到數百 MB。如果執行測試套件,而且必須為每個測試擷取/解壓縮相同的應用程式套件,這可能會成為嚴重的效能問題。

快取的內容

快取可套用至由 configureApp 輔助程式呼叫產生的應用程式套件。繼承的驅動程式可透過提供自己的 onPostProcess 屬性定義來自訂其快取邏輯,但一般來說,我們需要快取所有需要先下載和/或解壓縮的應用程式套件,才能實際安裝在測試裝置上。例如,在 iOS 上,這些是 .ipa.zip 壓縮的應用程式套件,或 Android 上的 .aab

遠端應用程式套件的快取

為了驗證從給定的 URL 下載的應用程式套件是否可以從快取中(重新)使用,請套用下列步驟

  1. 腳本會傳送 HEAD 要求至給定的連結,以僅擷取回應標頭。如果這個要求失敗/逾時,則不會套用快取。
  2. 會擷取下列標頭值:Last-ModifiedCache-Control。如果沒有 Last-Modified 標頭,或無法將標頭值解析為有效的日期時間,則不會套用快取。
  3. 腳本會檢查給定的 URL 是否已存在於快取中。如果應用程式尚未快取,則會下載該應用程式,並將其目前的標頭值和雜湊值新增至快取。
  4. 如果 URL 已在快取中,則腳本會驗證
    • 目前的 Last-Modified 日期時間與前一個不同
    • 目前的 Last-Modified 日期時間與快取中的差異未大於 max-age(如果存在)
    • 快取檔案/資料夾的雜湊值未變更(例如,在快取中時未損毀)
  5. 如果以上所有驗證都成功,則會傳回快取的組建,否則會刪除目前快取的項目,並下載新的項目。

本機應用程式套件的快取

只有在應用程式套件在安裝到測試裝置上之前需要一些前置處理時,才需要快取這些套件。例如,在 iOS 上,.ipa 套件必須先解壓縮,因為系統安裝程式只能使用 .app 資料夾。

  1. 腳本會驗證指定的套件路徑是否已存在於快取中。如果套件尚未在快取中,則會先進行前置處理,再將其新增到快取中。
  2. 腳本會驗證套件的雜湊值,並將其與先前儲存的雜湊值進行比較。如果雜湊值不符,則會刪除快取的項目,並重複套件的前置處理。

快取檔案系統的設定方式

基本驅動程式將所有應用程式套件儲存在快取中的位置位於系統暫存資料夾中。它會根據每個處理程序進行設定,因此在同一個 Appium 伺服器處理程序範圍內初始化的每個測試階段都可以利用它。它是一個 LRU 快取,具有以下限制

  • 最大項目數:1024
  • 每個項目的最長存活時間 (TTL):24 小時
  • 每次存取時都會更新每個項目的 TTL

警告

注意:快取根資料夾設定為在 Appium 處理程序終止時自動刪除。這只有在使用 SIGINTSIGTERM 終止 Appium 伺服器時才會運作。如果使用 SIGKILL,則不會執行快取清除。