iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0

在 Appium Inspector 的章節中,我們有提到了 Session Capabilities 的概念,簡單來說 Session 是一切 Appium 的開端,我們需要先與 Appium Server 建立起一個 Session 連線,並且在建立時,我們會跟 Appium Server 說,這次的 Session 需要具備哪些功能,例如設定語言、要執行在哪隻裝置上,這些都是關於 Session 初始化時需要帶入的 Capabilities。

什麼是 Appium Session Capabilities?

Appium Session Capabilities 是一組關鍵值,這個 session 就是 Appium 與測試設備之間的溝通橋梁。在會話創建的過程中,我們可以通過 Session Capabilities 來定義測試的設定,這包括測試設備的型號、操作系統版本、應用程式類型以及其他自訂的設定。通過這些 Capabilities 我們可以精確控制測試的環境和行為,從而提高測試的準確性和效率。

如同我們上個章節介紹的,在 Appium Inspector 啟動時,會需要輸入的這些值便是 Appium Session Capabilities,如果還沒有看過上個章節的文章的話,歡迎先到上個章節探索一下 Appium Inspector 的使用。
https://ithelp.ithome.com.tw/upload/images/20241002/20168859T0rbNtggl0.png

為什麼需要 Session Capabilities?

在進行跨設備、跨平台測試時,每個設備的配置可能都不相同。例如,某些測試可能需要透過指定的語言執行,而其他測試則可能需要跳過權限認證。透過使用 Appium 的 Session Capabilities,我們能夠靈活配置這些變化,確保測試覆蓋到所有指定的設備和版本。

另外,Session Capabilities 允許我們控制測試環境的行為。例如,是否在每次測試前重新安裝應用,或者在測試結束後保持應用開啟等。

Appium Capabilities 三大類

Appium Capabilities 分為三大類

  1. 通用 Capabilities:適用於所有平台的配置。
  2. Android 專用 Capabilities:僅適用於 Android 測試的配置。
  3. iOS 專用 Capabilities:僅適用於 iOS 測試的配置。

下面我們針對每個類別常見的 Capabilities 做舉例。

通用 Capabilities

以下是一些常見且重要的 Session Capabilities 設定項目,根據平台的不同(Android 或 iOS),這些設定會有些許差異:

官方文件:https://appium.io/docs/en/latest/guides/caps/

Type Required 說明
platformName string yes 指定測試所用設備的操作系統平台,可選 iOS, Android, Windows 等
automationName string yes 指定要使用的 Appium driver。對於 Android,通常是 UiAutomator2,而對於 iOS,通常是 XCUITest。
deviceName string no 要自動化的特定裝置的名稱,例如 iPhone 14(目前僅對指定 iOS 模擬器有用,因為在其他情況下,通常建議透過 appium:udid 功能使用特定裝置 ID)。
app string no 指定要測試的應用檔案路徑(apk 或 ipa)
fullReset bool no 如果為 true,則指示 Appium 驅動程式在會話啟動和清理期間避免其通常的重置邏輯(預設為 false)
noReset bool no 指定是否在測試會話結束後保留應用程序的狀態(例如登錄狀態),預設為 false
platformVersion string no 測試裝置的版本
udid string no 指定設備的唯一識別碼,用於連接具體設備(特別適用於多台設備同時測試)。

Android 專用 Capabilities

官方文件:https://github.com/appium/appium-uiautomator2-driver

Type 說明
appPackage string 要啟動的 app 的 id
appActivity string 指定的 app 啟動的介面
autoGrantPermissions bool 這個相當好用的 Capabilities,當我們今天在測試時遇到像是麥克風、相簿、鏡頭這些需要同意權限才能繼續使用 app 的彈窗時,如果我們有設定這個 Capabilities,測試便會自動授權

iOS 專用 Capabilities

官方文件:https://appium.github.io/appium-xcuitest-driver/latest/reference/capabilities/

Type 說明
bundleId string 用於啟動 app 的 id,相似於 android 的 appPackage,當今天app 或 bundleId 功能均未提供,則 XCUITest 驅動程式將從主畫面啟動。
autoAcceptAlerts bool 自動接受所有權限彈出的視窗,這個與 Android 的 autoGrantPermissions 有些區別,在 Android 會是連彈窗都沒有彈,iOS 則是彈出後幫我們選擇同意的那個選項
useNewWDA bool 指定是否每次都使用新的 WebDriverAgent 執行測試

如何最佳化 Session Capabilities?

在配置 Appium 測試時,合理的設定 Capabilities 可以幫助提升測試的穩定性和效率。以下是幾個最佳實踐:

  1. 避免頻繁重置:在測試過程中,頻繁重置應用會浪費大量時間。透過設定 noResettrue,我們可以避免每次測試都重新安裝應用並清除數據,這樣能大大加快測試速度
  2. 提升測試穩定性:與上一點相似,當今天我們希望測試之間沒有相依性,便可以透過 noResetfullReset 來讓測試之間能夠復原到最初的狀態
  3. 設定合理的超時時間:合理配置 newCommandTimeoutadbExecTimeout,確保測試不會因為設備回應時間過長而意外中止。同時,也可以避免過短的超時時間造成的測試失敗
  4. 平台特定配置:針對不同平台(iOS 或 Android)進行細微的調整,例如 iOS 可以透過 useNewWDA 避免 WebDriverAgent 的重複重建,而 Android 可以透過 appWaitActivity 確保正確的應用狀態
  5. 利用自動化權限配置:透過 autoGrantPermissionsautoAcceptAlerts,我們可以自動處理測試過程中的權限問題,這有助於減少手動干預,讓測試更具可重複性

結語

Appium Capabilities 提供了廣泛的設置選項,使測試人員可以更靈活的控制測試環境,通過正確的配置 Capabilities,能夠有效的提升我們對於自動化測試的效率及穩定性,在這篇文章中我們列舉的案例只是冰山一角,因此每個皆有附上官方的文件,若是有需要的話可以查看有哪些 Capabilities 可以使用,希望這些內容能幫助我們更好的利用 Appium 進行測試。


上一篇
[22] Robot Framework 結合 Appium 進行 App 自動化測試 - Appium Inspector 安裝及操作介紹
下一篇
[24] App 自動化測試定位元件的方式
系列文
建立應用程式 UI 自動化測試 - 以 Robot Framework 為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言