iOS 自動(dòng)化測(cè)試踩坑(一): 技術(shù)方案、環(huán)境配置與落地實(shí)踐
移動(dòng)端的自動(dòng)化測(cè)試,最常見(jiàn)的是 Android 自動(dòng)化測(cè)試,我個(gè)人覺(jué)得 Android 的測(cè)試優(yōu)先級(jí)會(huì)更高,也更開(kāi)放,更容易測(cè)試;而 iOS 相較于 Android 要安全穩(wěn)定的多,但也是一個(gè)必須測(cè)試的方向,這個(gè)系列文章記錄了 iOS 自動(dòng)化測(cè)試的一些實(shí)踐。
Xcode 下載地址:Sign In - Apple
下載安裝好的圖標(biāo)如下 :
先來(lái)看目前主流的 iOS 移動(dòng)測(cè)試框架
Appium:目前最常用的 App 自動(dòng)化測(cè)試框架,具備跨平臺(tái)性
Calabash-IOS :BDD 模式,沒(méi)有過(guò)多的了解使用
KIF:KIF 使用 XCTest 框架,需要對(duì) Objective—C 、Swift 和 XCTest 掌握程度較高,這個(gè)對(duì)測(cè)試工程師來(lái)說(shuō)學(xué)習(xí)成本太大
XCTest:蘋(píng)果官方提供的 iOS 測(cè)試框架,要求同 KIF 一致
WebDriverAgent:由 Facebook 推出的一款 iOS 移動(dòng)測(cè)試框架,也是 Appium 跨平臺(tái)的底層驅(qū)動(dòng);WDA 本身也是一個(gè)完整的基于 webdriver 協(xié)議的框架
Uiautomation :在 Xcode8 后廢棄
之前的 Android 自動(dòng)化我們選擇的是 Appium 框架作為底層的驅(qū)動(dòng)框架,當(dāng)時(shí)就介紹說(shuō) Appium 的優(yōu)點(diǎn)之一就是跨平臺(tái)性,其實(shí)也就是因?yàn)槠涞讓臃庋b了 WebDriverAgent,而我們期望的是:
做一套可以跨平臺(tái)支持的 App 測(cè)試方案,可以在公司的 Android 和 iOS 版本間自由切換測(cè)試
并且在編程語(yǔ)言上要是測(cè)試工程師常用的 Java 或 Python,降低學(xué)習(xí)成本
綜上原因,那么最終的選擇依然是 Appium。
Appium 官方提供了一個(gè)演練的 iOS App,以此為例進(jìn)行演示。
Appium 演練 example 地址:
https://github.com/appium/ios-uicatalog 2
將項(xiàng)目 clone 到本地后用 Xcode 打開(kāi),注意打開(kāi) iOS 項(xiàng)目要打開(kāi)以 .xcodeproj 結(jié)尾的文件 。
插入真機(jī),Xcode 上選擇真機(jī),在Singing 中添加 AppleID 作為 account,生成一個(gè)本地的 Provisioning Profile 和設(shè)備上的證書(shū)
踩坑:你可能會(huì)遇到如下的錯(cuò)誤信息
這是因?yàn)槟愕?bundle identifier 不唯一導(dǎo)致,將其修改自定義為一個(gè)唯一的 bundle identifier 再嘗試即可
Xcode 中選中 Build,Success 后在手機(jī)中我們可以看到 UICatalog 已經(jīng)被成功安裝,嘗試打開(kāi):
踩坑: 蘋(píng)果對(duì)未在 AppStore 中上架的 App 做了限制,默認(rèn)不受信任,所以我們需要手動(dòng)將其設(shè)置為信任: 設(shè)置-通用-描述文件與設(shè)備管理
這個(gè)時(shí)候再打開(kāi) App,就可以正常操作運(yùn)行了
上面介紹了這里是選中 Appium 作為移動(dòng)測(cè)試框架,因此 Appium 相關(guān)環(huán)境的安裝必不可少,具體安裝細(xì)節(jié)可參考另一篇文章:Windows(Win10)、Mac下安裝 Appium
另外還需要幾個(gè)輔助測(cè)試工具和命令,依賴工具包安裝:
查看模擬器列表:instruments -s devices 運(yùn)行結(jié)果如下,可以看到最前面兩行顯示的其實(shí)是本機(jī)的 Mac 和連接的 iPhone 真機(jī),剩下的是模擬器。
查看真機(jī)列表:idevice_id -l
安裝 App:ideviceinstaller -i demo.app
命令行編譯(在做持續(xù)集成時(shí)候可能會(huì)用到):
雖然 Appium 使用WDA作為底層的 iOS 自動(dòng)化框架,但是由于版本的更新等原因,可能造成 Appium 本身自帶的 WDA 會(huì)有 bug,因此為了保險(xiǎn)起見(jiàn),先手動(dòng)下載 facebook 的 WebDriverAgent facebook WebDriverAgengithub
地址:https://github.com/facebookarchive/WebDriverAgent 1
然后我們進(jìn)入 WebDriverAgent 進(jìn)行編譯,在 Scripts 下有一個(gè) bootstrap.sh 腳本,執(zhí)行它即可。
小技巧: 使用 bash -x 命令可以輸出更詳細(xì)的執(zhí)行過(guò)程
踩坑: 安裝最后我們可以看到部分依賴安裝需要安裝 Carthage 這個(gè)東西,如果沒(méi)注意的話就會(huì)造成 RoutingHTTPServer 部分文件缺失,后面 build 就會(huì)報(bào)錯(cuò) 。
通過(guò)命令 brew install carthage 安裝后再執(zhí)行 ./Scripts/bootstrap.sh 即可。
根據(jù) WebDriverAgent 官網(wǎng)提供的步驟,將參數(shù)替換為我們真機(jī)的參數(shù)后在真機(jī)上嘗試build 。
踩坑: 執(zhí)行完命令后可能會(huì)出現(xiàn)如下報(bào)錯(cuò)
從報(bào)錯(cuò)信息來(lái)看,缺少 development team,那么我們回到 Xcode,將 Automatically manage signing 進(jìn)行勾選后選擇一個(gè) Team,注意要進(jìn)入 WebDriverAgentRunner 中進(jìn)行設(shè)置 。
設(shè)置好之后又會(huì)出現(xiàn)報(bào)錯(cuò),如下:
這個(gè)報(bào)錯(cuò)信息就和我們之前提到的一樣,bundle indentifler 不唯一,保險(xiǎn)起見(jiàn),這里將項(xiàng)目中所有的 Targets 都進(jìn)行了修改
修改好之后我們?cè)俅?build,之前的問(wèn)題解決了,不幸的是 build 又 fail 了,又出現(xiàn)了新的報(bào)錯(cuò):
幸運(yùn)的是在 Google 上一位外國(guó)友人輕描淡寫(xiě)的一句話解決了我的問(wèn)題(感謝外國(guó)友人~)
沒(méi)錯(cuò),我們?cè)趫?bào)錯(cuò)出雙擊,進(jìn)入到報(bào)錯(cuò)代碼處,將 assign 改為 strong 后再次 build :
Build succeeded?。?!老淚縱橫…
最終,再執(zhí)行
終于在 iOS 真機(jī)上看到了 WDA 的身影
上面是我所經(jīng)歷的各種坑,也都是我實(shí)測(cè)過(guò)一步步填平的,下面試我認(rèn)識(shí)的小伙伴踩到的坑和填坑方法,作為補(bǔ)充供記錄參考
1)執(zhí)行 ./Scripts/bootstrap.sh ERROR in ./js/app.js 報(bào)錯(cuò)
2)執(zhí)行時(shí)候報(bào) xcodebuild failed with code 65 錯(cuò)誤
花了很大的功夫和篇幅,記錄 iOS 自動(dòng)化的準(zhǔn)備工作,踩了很多坑,坑不能白踩,后面繼續(xù)實(shí)現(xiàn) iOS 的自動(dòng)化測(cè)試落地,也歡迎小伙伴一起留言探討。
對(duì)于想系統(tǒng)進(jìn)階提升測(cè)試開(kāi)發(fā)技能的同學(xué),這里推薦霍格沃茲測(cè)試學(xué)院出品的《測(cè)試開(kāi)發(fā)從入門(mén)到高級(jí)實(shí)戰(zhàn)》系統(tǒng)進(jìn)階班課程,有針對(duì) iOS 自動(dòng)化測(cè)試的獨(dú)家特色(大廠海量用戶 App 實(shí)戰(zhàn)案例總結(jié),可能是市面上最具深度的)經(jīng)典課程。