iOS 自动化——技术方案、环境配置
移動端的自動化測試,最常見的是 Android 自動化測試,我個人覺得 Android 的測試優先級會更高,也更開放,更容易測試;而 iOS 相較于 Android 要安全穩定的多,但也是一個必須測試的方向,這個系列文章記錄了 iOS 自動化測試的一些實踐。
Xcode 下載地址:https://developer.apple.com/download/
下載安裝好的圖標如下 :
先來看目前主流的 iOS 移動測試框架
- Appium:目前最常用的 App 自動化測試框架,具備跨平臺性
- Calabash-IOS :BDD 模式,沒有過多的了解使用
- KIF:KIF 使用 XCTest 框架,需要對 Objective—C 、Swift 和 XCTest 掌握程度較高,這個對測試工程師來說學習成本太大
- XCTest:蘋果官方提供的 iOS 測試框架,要求同 KIF 一致
- WebDriverAgent:由 Facebook 推出的一款 iOS 移動測試框架,也是 Appium 跨平臺的底層驅動;WDA 本身也是一個完整的基于 webdriver 協議的框架
- Uiautomation :在 Xcode8 后廢棄
之前的 Android 自動化我們選擇的是 Appium 框架作為底層的驅動框架,當時就介紹說 Appium 的優點之一就是跨平臺性,其實也就是因為其底層封裝了 WebDriverAgent,而我們期望的是:
- 做一套可以跨平臺支持的 App 測試方案,可以在公司的 Android 和 iOS 版本間自由切換測試
- 并且在編程語言上要是測試工程師常用的 Java 或 Python,降低學習成本
綜上原因,那么最終的選擇依然是 Appium。
Appium 官方提供了一個演練的 iOS App,以此為例進行演示。
Appium 演練 example 地址:
https://github.com/appium/ios-uicatalog
將項目 clone 到本地后用 Xcode 打開,注意打開 iOS 項目要打開以 .xcodeproj 結尾的文件 。
插入真機,Xcode 上選擇真機,在Singing 中添加 AppleID 作為 account,生成一個本地的 Provisioning Profile 和設備上的證書
踩坑:你可能會遇到如下的錯誤信息
這是因為你的 bundle identifier 不唯一導致,將其修改自定義為一個唯一的 bundle identifier 再嘗試即可
Xcode 中選中 Build,Success 后在手機中我們可以看到 UICatalog 已經被成功安裝,嘗試打開:
踩坑: 蘋果對未在 AppStore 中上架的 App 做了限制,默認不受信任,所以我們需要手動將其設置為信任: 設置-通用-描述文件與設備管理
這個時候再打開 App,就可以正常操作運行了
上面介紹了這里是選中 Appium 作為移動測試框架,因此 Appium 相關環境的安裝必不可少,具體安裝細節可參考另一篇文章:Windows(Win10)、Mac下安裝 Appium
另外還需要幾個輔助測試工具和命令,依賴工具包安裝:
查看模擬器列表:instruments -s devices 運行結果如下,可以看到最前面兩行顯示的其實是本機的 Mac 和連接的 iPhone 真機,剩下的是模擬器。
查看真機列表:idevice_id -l
安裝 App:ideviceinstaller -i demo.app
命令行編譯(在做持續集成時候可能會用到):
雖然 Appium 使用WDA作為底層的 iOS 自動化框架,但是由于版本的更新等原因,可能造成 Appium 本身自帶的 WDA 會有 bug,因此為了保險起見,先手動下載 facebook 的 WebDriverAgent facebook WebDriverAgengithub
地址:https://github.com/facebookarchive/WebDriverAgent
然后我們進入 WebDriverAgent 進行編譯,在 Scripts 下有一個 bootstrap.sh 腳本,執行它即可。
小技巧: 使用 bash -x 命令可以輸出更詳細的執行過程
踩坑: 安裝最后我們可以看到部分依賴安裝需要安裝 Carthage 這個東西,如果沒注意的話就會造成 RoutingHTTPServer 部分文件缺失,后面 build 就會報錯 。
通過命令 brew install carthage 安裝后再執行 ./Scripts/bootstrap.sh 即可。
根據 WebDriverAgent 官網提供的步驟,將參數替換為我們真機的參數后在真機上嘗試build 。
踩坑: 執行完命令后可能會出現如下報錯
從報錯信息來看,缺少 development team,那么我們回到 Xcode,將 Automatically manage signing 進行勾選后選擇一個 Team,注意要進入 WebDriverAgentRunner 中進行設置 。
設置好之后又會出現報錯,如下:
這個報錯信息就和我們之前提到的一樣,bundle indentifler 不唯一,保險起見,這里將項目中所有的 Targets 都進行了修改
修改好之后我們再次 build,之前的問題解決了,不幸的是 build 又 fail 了,又出現了新的報錯:
幸運的是在 Google 上一位外國友人輕描淡寫的一句話解決了我的問題(感謝外國友人~)
沒錯,我們在報錯出雙擊,進入到報錯代碼處,將 assign 改為 strong 后再次 build :
Build succeeded!!!老淚縱橫…
最終,再執行
終于在 iOS 真機上看到了 WDA 的身影
上面是我所經歷的各種坑,也都是我實測過一步步填平的,下面試我認識的小伙伴踩到的坑和填坑方法,作為補充供記錄參考
1)執行 ./Scripts/bootstrap.sh ERROR in ./js/app.js 報錯
2)執行時候報 xcodebuild failed with code 65 錯誤
花了很大的功夫和篇幅,記錄 iOS 自動化的準備工作,踩了很多坑,坑不能白踩,后面繼續實現 iOS 的自動化測試落地,也歡迎小伙伴一起留言探討。
更多技術文章
總結
以上是生活随笔為你收集整理的iOS 自动化——技术方案、环境配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM 字节码指令手册 - 查看 Jav
- 下一篇: 智慧高校怎么做教育监控?Smartbi高