App 測試自動化: RobotFramework + Appium (1)

Steven Shen
Cubo AI
Published in
7 min readJul 2, 2021

這是一篇簡單的教學文,紀錄如何透過 RobotFramework 與 Appium 來達到軟體測試自動化的目的。至於為什麼要做自動化測試,我相信已經有很多人有文章介紹,我自己的看法,一是減少人為錯誤,提升軟體 QA 的工作效率,再來是提升產品發布時的信心。

第一篇會先介紹,什麼是 Appium,以及如何安裝與設定,第二篇會介紹,如何透過 RobotFramework 編寫 Test cases,第三篇則會進一步談到如何串聯 CI 與 TCMS 系統。

對了,我不是 QA,所以對於專業的 QA 經驗,我真的沒辦法提供太多見解。

先從 Appium 談起好了

要做網頁自動化,大家應該都會先想到 Selenium,但是如果是 App 呢? Appium 提供一個相當優秀的框架,他是一個 Client/Server 的框架,提供一套完整的 Protocol 讓你可以去操控 iOS/Android/Windows app,不管是模擬器或者實體機器都可以運作,功能十分強大。

RobotFramework 則是一套自動化腳本程式框架,可以透過 Library 的引用擴充功能,所以可以串接 Selenium,當然也可以介接 Appium。我覺得 RobotFramework 最棒的是他的語法,他是 Keyword based 的邏輯,你可以透過引入 Library 擴充更多 Keyword,也可以自訂 Keyword,Keyword 可以是任何語言,像是中文。透過 Keyword 的設計,可以讓你寫 Test cases 像是在寫自然語言文章一樣。RobotFramework + Appium 是完美的組合。

我們先從 Appium 來安裝好了。

Appium 是由 Node.js 寫成,所以你要先安裝 Node.js,而且版本要新,安裝很簡單:

npm install -g appium

另外要裝 Appium Desktop,而且是非常強烈建議要裝,很重要,會省超多時間。Appium Desktop 就上它的 github 下載安裝就好。

接下來,我們先從 iOS Simulator 開始玩起,但想要有 iOS Simulator,得先裝 Xcode。Xcode 在 Mac App Store 上就可以下載了,但你還必須要有開發者帳號。

接下來,先開啟 Appium Desktop,按下 Start Server,這個意思跟你直接在命令列執行 appium 是一樣的,就是跑 appium server。

Appium server 跑在 4723 Port 上。接下來按右上角的 Start Inspector Section 按鈕(放大鏡那個)。

並在 Desired Capabilities 中輸入:

  • platformName: iOS
  • automationName: XCUITest
  • platformVersion: 14.5 (要看你 Simulator 的 iOS 版本而定)
  • deviceName: iPhone 12 Pro (看你想跑在哪個 Simulator 上,你也可以用 iPhone simulator 這個名稱)
  • app: com.apple.mobileslideshow (這個內建 Photos app 的 bundle ID,你也可以指定你自己 app 的 bundle ID,或者 app/ipa/apk 檔案路徑)

將這組 Capabilities Save As 成你想儲存的名稱,未來可以重複使用。然後按下 Start Session。

記住 Appium 只是一個 Client,你是先透過它把 Appium Server 執行起來,然後在連上 Server,並提供你一個好用的介面,將命令送給 Server,再由 Server 透過底層的 Driver 去控制模擬器跟 App。

在 Start Session 後,你就會看到 Simulator 被叫起來,Photos app 被打開。

簡單介紹一下 Inspector UI。左邊是 App 畫面截圖,你把滑鼠游標移過去,會發現有些元件會被 Highlight 顯示,效果就像瀏覽器的 Inspector 一樣,這是讓你可以很容易鎖定某個特定 UI 元件。中間的部分是 UI 的樹狀階層關係,如果你從左邊的截圖還是很難鎖定你要的元件的話,你也可以從樹狀階層一層一層下去找,總是會找到的。最右邊是你選定元件的內容。基本上 Inspector 可以查看每個 app ,即便是 iPhone 內建的 app 也是。

然後上面有一排按鈕

這排按鈕提供一些功能像是重新載入、搜尋 UI 元件、錄製動作等等,也可以模擬 Swipe 或者 Click Element At Coordinates 動作。

最右邊視窗是 Selected Element,在這裡你可以取得元件的一些相關資訊,尤其是 Locator,這很重要,讓你之後在測試項目時,才有辦法在你的腳本中去定位元件的位置。

如果只能在模擬器上跑不太過癮,那麼 Appium 也能在真的 iPhone 上執行嗎?

不過相比於模擬器,要在 iPhone 上執行會稍微比較複雜一點。

  1. 你必須要有個開發者帳號,在 Xcode 中登入你的開發者帳號,並取得 Team ID。
  2. 在 Xcode 的 Devices and Simulators 中登錄你的手機,允許作為開發用機子,並取得手機的 identifier。
  1. 用 Xcode 開啟 /usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj (如果你找不到的話,代表你尚未用 npm 安裝 appium。此外,如果你是使用 nvm 安裝 node.js 的話,appium 安裝路徑應該會是在 ~/.nvm/versions/node/v14.17.0/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj/ )
  2. WebDriverAgent 的 xcode 專案被開啟後,修改 target WebDriversAgentLibWebDriverAgentRunner 的 Signing & Capabilities 設定,將 Team 切換為你的開發者帳號。
  3. 將 WebDriverAgentRunner build 到你的手機中。
  4. Build 成功後,你手機桌面會多出個 WebDriverAgentRunner app,不要刪除這個 app,接下來我們同樣用 Appium Desktop 來測試一下。

與模擬器連線不同,Capabilities 的參數有些改變。

多了幾個:

  • udid: 在這裡輸入你手機的 identifier
  • xcodeOrgId: 輸入你的 team ID
  • xcodeSigningId: 輸入 iPhone Developer
  • deviceName: 輸入你 iPhone 手機名稱
  • clearSystemFiles: 型態設為 boolean,並設為 true

手機記得解鎖,Start Session 後就會看到你的 app 被執行起來了。

--

--