iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
DevOps

建立應用程式 UI 自動化測試 - 以 Robot Framework 為例系列 第 25

[25] Robot Framework 結合 Appium 進行 App 自動化測試 - Appium iOS 環境安裝

  • 分享至 

  • xImage
  •  

在這個章節我們將手把手帶大家一起將 Appium iOS 的環境安裝完成。

但是在開始安裝前,我們還是需要先知道其運作的原理,如下圖所示,Appium Server 會與 Appium XCUITest Driver 做溝通,Appium XCUITest Driver 通過 WDA 與 iOS 設備進行溝通,這部分相較於 Android 比較特別的地方是 WDA 並不是由 Apple 主導的,而是一個第三方工具,原先由 Facebook 做維護的,現在改由 Appium 提供,下面我們針對 Appium-XCUITest-Driver、WDA、XCUITest 的愛恨糾葛做更詳細的介紹:
https://ithelp.ithome.com.tw/upload/images/20241004/20168859eTu1ki4sZa.png

關於 Appium-XCUITest-Driver、WDA、XCUITest

Appium-XCUITest-Driver

如同前面幾章提到的 Appium Driver 的概念,Appium-XCUITest-Driver 是用於驅動 XCUITest 來執行 UI 測試的驅動程式。它負責使 Appium 能夠控制和測試 iOS 應用程式,透過 Appium-XCUITest-Driver 驅動 XCUITest 進行測試時,實際上是通過 WDA 與 iOS 設備進行通信的,算是 Appium Server 與移動裝置中間的媒介。

Appium-XCUITest-Driver 支援自動化測試的許多功能,包括與 iOS 原生應用、混合應用以及網頁的互動。Appium-XCUITest-Driver 的設計目的是通過 XCUITest 和 WebDriverAgent 的協同作用來幫助測試人員更好的控制 iOS 設備。透過 Appium-XCUITest-Driver,測試人員能夠使用 Appium 跨平台的 API,無需學習 XCUITest 即可進行 iOS 測試,極大的提高了測試的靈活性和效率。

WebDriverAgent (WDA)

WebDriverAgent (WDA) 是最早期由 Facebook 開發的一個開源項目,目的在於作為 Appium 與 iOS 設備之間的橋樑,提供了標準的 WebDriver API。WebDriverAgent 的工作原理是利用 XCTest.framework 呼叫 Apple 的 API,並通過在 iOS 設備上運行一個 HTTP 伺服器來接收 Appium 發送的 HTTP 請求,然後將這些請求轉化為 iOS 設備可以理解和執行的具體操作。WDA 的這種架構允許其與實體裝置或模擬器配合使用,使得測試的適用性廣泛且靈活。WDA 能夠實現即時通信和反饋,當測試過程中發生問題時,它可以提供詳細的錯誤日誌,有助於調試和解決問題,從而確保測試過程的順利進行。這使得測試人員能夠有效模擬使用者操作並驗證應用的各種功能。

儘管 WDA 最初是由 Facebook 開發,但從 2019 年起,Facebook 已將該開源項目標記為已archived ,並將內部項目從 WDA 遷移到 IDB 的方式。後續若需要使用 WDA,我們可以改用由 Appium 社群維護的版本:WDA:https://github.com/appium/WebDriverAgent

XCUITest

XCUITest 是由 Apple 官方提供的測試框架,用於 Apple 產品應用程式的 UI 測試。XCUITest 是基於 XCTest 的擴展,允許自動化測試應用程式的用戶界面,以模擬真實用戶的操作。主要作用是允許開發者和測試人員直接測試應用程式的使用者介面,並驗證其行為是否符合預期。由於 XCUITest 是 Apple 原生提供的框架,它具有非常高的穩定性和性能,能夠直接訪問應用的內部結構。這也使得 XCUITest 在進行複雜的 UI 測試時相對於其他第三方框架具有更強的可靠性。當與 Appium 整合時,XCUITest 讓測試人員能夠利用 Appium 的跨平台優勢進行測試,同時享受 Apple 原生工具所提供的強大功能。這種結合使得自動化測試過程更加無縫,不僅提高了測試效率,也使測試的穩定性得到了保障。

手把手環境安裝

在這個章節我們先假設這是是第一次觀看關於 Appium 環境設定的文章,因此有些在前面 Android 環境安裝章節有提到的內容這邊會在說明一次。

安裝 Xcode

安裝 Xcode 的方式有很多種,在這邊我們可以選擇最簡單的即可,也就是透過 App Store 安裝 Xocde,安裝好開啟後,Xcode 會詢問是否安裝 iPhone, iPad 等裝置的模擬機,在這邊一定需要安裝 iPhone 的模擬機,因為在後面的章節我們會透過模擬機來進行測試,https://apps.apple.com/tw/app/xcode/id497799835?mt=12

安裝 Python

由於我們會透過 Robot Framework 來進行測試,因此這邊需要先安裝 python ,python 的安裝可以到官網下載:https://www.python.org/downloads/ ,安裝後如果需要確認 python 已經安裝完成,可以透過 python -v 來做確認。

python3 -V
# Python 3.12.5

安裝 Node.js

由於 appium 是基於 node.js 進行開發的,因此我們需要先安裝 Node.js 的環境,環境請參考 官方網站 安裝,appium 官方建議透過 LTS 的方式安裝。

安裝後可以透過以下指令檢查安裝是否成功:

node -v
# v20.17.0

npm -v  
# 10.8.2

安裝 appium

Appium 可以使用以下命令進行全域安裝npm

npm install -g appium

如果大家有看到其他文章會下載一個像是下圖的 Appium Desktop 的化,需要注意這是 Appium 1.x 版吧工具,在 appium2 時這個已經被淘汰囉,我們可以看到在 Github 上 Repository 已經被 archived 囉。https://github.com/appium/appium-desktop
https://ithelp.ithome.com.tw/upload/images/20240930/20168859aWlBi3IQ4R.png

在這邊也需要注意 appium 對於安裝上還是有些限制的,像是對於 node 版本的支援,這邊會是個大坑,過去筆者在開發自動化測試時,經常會遇到升級 appium 後測試就不動啦,很高機率是因爲版本不支援的關係,需要抽絲剝繭找出衝突的版本,關於 appium 的限制,可以參考官方網站:https://appium.io/docs/en/latest/quickstart/requirements/

安裝後我們可以透過在終端機輸入 appium 來啟動 appium server,輸入後如果有在終端機上看到 像是下方展示的 appium log 的話表示安裝成功囉!

➜  ~ appium
[Appium] Welcome to Appium v2.11.3
[Appium] The autodetected Appium home path: /Users/maxtsai/.appium
[Appium] Appium REST http interface listener started on http://0.0.0.0:4723
[Appium] You can provide the following URLs in your client code to connect to this server:
	http://127.0.0.1:4723/ (only accessible from the same host)
	http://192.168.22.48:4723/
[Appium] No drivers have been installed in /Users/maxtsai/.appium. Use the "appium driver" command to install the one(s) you want to use.
[Appium] No plugins have been installed. Use the "appium plugin" command to install the one(s) you want to use.

安裝 Xcuitest Driver

還記得前面幾個章節提到的概念嗎?在 appium 開始,appium 將 appium server 及 appium driver 切開,如此一來可以安裝該次測試需要測試的 driver 即可,因此我們需要安裝 iOS 測試時需要使用的 Xcuitest,安裝之前請先確認 Appium 伺服器未運行(如果正在運行,請使用Ctrl-C退出)。然後運行以下命令:

appium driver install xcuitest

安裝成功後會顯示以下訊息:我們可以從下面的訊息得知,除了 iOS 可以做操作外,我們也可以針對 tvOS 進行測試。

✔ Checking if 'appium-xcuitest-driver' is compatible
✔ Installing 'xcuitest' using NPM install spec 'appium-xcuitest-driver'
ℹ Driver xcuitest@7.24.18 successfully installed
- automationName: XCUITest
- platformNames: ["iOS","tvOS"]

以為到這邊就結束了嗎!還沒有~ 與 Android 不同的是,我們還需要對我們的行動裝置安裝上面提到的 WDA!

將 WDA 安裝至裝置上

  1. 下載 WDA:首先我們需要先下載 WDA,下載的話可以到 appium 維護的載點:https://github.com/appium/WebDriverAgent/releases ,選擇 Source code (zip) 檔案下載,下載過後將其解壓縮,接著點開資料夾,找到 WebDriverAgent.xcodeproj 這個檔案後開啟

  2. 設定 WDA 專案:開啟後我們需要做些處理,原先一些設定都是綁在 appium 的,但是由於不能共用,因此我們需要轉成我們的帳號,我們可以根據下圖的步驟來做設定,

    1. 步驟 1:將該位置的下拉選單選擇成 WebDriverAgentRunner
    2. 步驟 2:點擊該位置的專案目錄進入到設定
    3. 步驟 3:確認當前修改的是 WebDriverAgentRunner
    4. 步驟 4:選擇 Signing & Capabilities
    5. 步驟 5:在這邊將 Team 選擇成我們的帳號,使用個人帳號會有可以 Bundle 的次數限制,如使用公司開發者帳號,可以提高限制
      https://ithelp.ithome.com.tw/upload/images/20241004/20168859xIyCFiWaDP.png
  3. 設定 Bundle Identifier:如果出現像是上圖的 Failed Registering Bundle Identifier 錯誤時,需要原先的 com.facebook.WebDriverAgentLib 後面加上多個數字,必須是唯一的不可與他人重複,例如:com.facebook.WebDriverAgentRunner20240915 (請不要直接貼上
    這組,需自訂)。

  4. 暫停一下:在這邊補充一些設定時可能會遇到的小問題:

    1. 當今天是第一次設定時可能會遇到需要接實體裝置的問題,這時候需要將手機接上實體裝置。
    2. Original error: Could not determine iOS SDK version: Command 'xcrun --sdk iphonesimulator --show-sdk-version' exited with code 1 當今天遇到上述的問題時,表示系統無法找到或識別 iOS 模擬器 SDK,只需要進行一下步驟即可:
      1. 安裝 Xcode 命令行工具
      2. 確保命令行工具已安裝並且指向正確的 Xcode 路徑:sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
  5. 將 WDA 運行的裝置上:終於,在完成一大串設定後,我們需要將 WDA 安裝到模擬機上,我們可以根據下圖步驟做安裝

    1. 選擇測試的裝置,這邊挑選一隻模擬器作為測試裝置
    2. 選擇功能列的 Product
    3. 選擇 Test,這邊注意需要透過 Test 的方式來做安裝,而不是直接 build
      https://ithelp.ithome.com.tw/upload/images/20241004/20168859FYwRXkmbji.png

安裝成功後我們便可以在模擬機的桌面上看見 WDA 的 app
https://ithelp.ithome.com.tw/upload/images/20241004/20168859j9QvvJkoYV.png

測試安裝成功

到這邊我們總算是把環境給設定好了,接著來測試一下是不是有安裝成功吧!這時候就可以透過前面幾張我們介紹的 Appium Inspector 了!如果 Appium Inspector 可以成功的話,到時候我們透過 Robot Framework 肯定也是可以成功的。

啟動 Appium Server

假設大家都已經啟動好 iOS 的模擬器了,接著我們來啟動我們的 appium,appium server 需要再啟動的情況下我們才可以操作 Appium inspector,啟動的方式很簡單,我們需要開啟動終端機,輸入 appium 後便可以啟動 appium server,此時終端機會顯示以下資訊,我們可以在下面的資訊得知當前 Appium 版本,以及我們安裝了哪些 Drivers & plugins,或是我們可以知道我們的 appium 開放哪些 host 讓我們可以調用,由於我們在這章節的上方已經安裝了 XCUITest Driver,因此在這邊我們也可以看見在 Available drivers 中看到 XCUITest Driver。

[Appium] Welcome to Appium v2.11.3
[Appium] The autodetected Appium home path: /Users/maxtsai/.appium
[Appium] Attempting to load driver uiautomator2...
[Appium] Attempting to load driver xcuitest...
[Appium] Requiring driver at /Users/maxtsai/.appium/node_modules/appium-uiautomator2-driver/build/index.js
[Appium] Requiring driver at /Users/maxtsai/.appium/node_modules/appium-xcuitest-driver/build/index.js
[Appium] AndroidUiautomator2Driver has been successfully loaded in 0.806s
[Appium] XCUITestDriver has been successfully loaded in 0.806s
[Appium] Appium REST http interface listener started on http://0.0.0.0:4723
[Appium] You can provide the following URLs in your client code to connect to this server:
	http://127.0.0.1:4723/ (only accessible from the same host)
	http://192.168.0.167:4723/
[Appium] Available drivers:
[Appium]   - uiautomator2@3.7.7 (automationName 'UiAutomator2')
[Appium]   - xcuitest@7.24.18 (automationName 'XCUITest')
[Appium] No plugins have been installed. Use the "appium plugin" command to install the one(s) you want to use.

設定 Appium Inspector

這時後我們打開 Appium Inspector,將下方的值一個個複製到左側的方框中,或是在 Json Represention 的區塊,點擊右上角的”筆”按鈕後,將上面的 json 複製貼上,如此一來就準備好囉。

{
  "platformName": "iOS",
  "appium:automationName": "XCUITest",
  "appium:bundleId": "com.apple.Preferences",
  "appium:deviceName": "iPhone 15 Pro"
}

https://ithelp.ithome.com.tw/upload/images/20241004/2016885991VLbcoruc.png

針對上面的值我們做個說介紹:

  • platformName: 指定測試所用的設備操作系統。這裡設定為 iOS,表示測試將在 iOS 設備上運行
  • automationName: 指定要使用的自動化 driver,也就是我們安裝的 appium driver
  • bundleId: 指定要測試的 App 的 bundleId,如果是 apple 預設的 app 的話,bundleId 可以查看這裡 https://support.apple.com/zh-tw/guide/deployment/depece748c41/web
  • deviceName: 指定測試所用的設備名稱或型號,在這邊我們設定成模擬器的名稱

完成上面的輸入後,我們點擊 “Start Session” 的按鈕,便可以開始連線,連接上後畫面會跳轉至 iPhone 的設定 app 的畫面,那麼恭喜,我們成功了!!!💪
https://ithelp.ithome.com.tw/upload/images/20241004/20168859rrf7uIlDd4.png

結語

到這邊我們已經完成 Appium iOS 的環境安裝囉,如果希望透過實體機來進行測試的話,步驟不會差太多,唯一的差異會是在安裝 WDA 時需要指定的是實體裝置,iOS 的設定相較於 Android 來的更加煩瑣,能夠看到這裡並完成的真的是勇者!起來走走休息一下再繼續吧!


上一篇
[24] App 自動化測試定位元件的方式
下一篇
[26] Robot Framework 結合 Appium 進行 App 自動化測試 - Android/iOS 測試實際開發
系列文
建立應用程式 UI 自動化測試 - 以 Robot Framework 為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言