iOS 自动化测试
?一、測(cè)試背景概述
隨著移動(dòng)互聯(lián)網(wǎng)時(shí)代的發(fā)展,移動(dòng)終端的自動(dòng)化測(cè)試日益活躍,總體來看在Android平臺(tái)上的自動(dòng)化工具和實(shí)踐比較多,IOS的UI自動(dòng)化測(cè)試由于系統(tǒng)封閉的原因,一直不太成熟。本著不侵入工程和擁抱原生的原則實(shí)現(xiàn)一套自動(dòng)化測(cè)試方案。自動(dòng)化測(cè)試節(jié)省時(shí)間節(jié)省真機(jī)的成本,而且更高效的覆蓋所有的iOS機(jī)型測(cè)試,避免每次上線前重復(fù)的人工回歸測(cè)試,保證每次上線的版本穩(wěn)定運(yùn)行。
二、iOS Appium 原理
經(jīng)過調(diào)研使用Appium進(jìn)行自動(dòng)化測(cè)試,Appium 是一個(gè)自動(dòng)化測(cè)試開源工具,支持 iOS 平臺(tái)和 Android 平臺(tái)上的原生應(yīng)用,web 應(yīng)用和混合應(yīng)用。
- “移動(dòng)原生應(yīng)用”是指那些用 iOS 或者 Android SDK 寫的應(yīng)用。
- “移動(dòng) web 應(yīng)用”是指使用移動(dòng)瀏覽器訪問的應(yīng)用(Appium 支持 iOS 上的 Safari 和 Android 上的 Chrome)。
- “混合應(yīng)用”是指原生代碼封裝網(wǎng)頁(yè)視圖——原生代碼和 web 內(nèi)容交互。比如,我們?cè)谖⑿爬锟梢圆榭淳W(wǎng)頁(yè),可以通過網(wǎng)頁(yè)應(yīng)用買電影票等。
重要的是,Appium 是一個(gè)跨平臺(tái)的工具:它允許測(cè)試人員在不同的平臺(tái)(iOS,Android)使用同一套API來寫自動(dòng)化測(cè)試腳本,這樣大大增加了 iOS 和 Android 測(cè)試套件間代碼的復(fù)用性。
- Appium優(yōu)點(diǎn)
- 開源
- 跨架構(gòu):Native App、Hybird App、Web App
- 跨設(shè)備:Android、iOS、Firefox OS
- 不依賴源碼
- 使用任何 WebDriver 兼容的語言來編寫測(cè)試用例。比如 Java, Objective-C, JavaScript with Node.js (in both callback and yield-based flavours), PHP, Python, Ruby, C#, Clojure, 或者 Perl.
- 不需要重新編譯APP
- 支持IOS手機(jī)錄制視頻
- Appium理念
- 你無需為了自動(dòng)化,而重新編譯或者修改你的應(yīng)用。
- 你不必局限于某種語言或者框架來寫和運(yùn)行測(cè)試腳本。
- 一個(gè)移動(dòng)自動(dòng)化的框架不應(yīng)該在接口上重復(fù)造輪子。(移動(dòng)自動(dòng)化的接口應(yīng)該統(tǒng)一)
- 無論是精神上,還是名義上,都必須開源。
1. iOS 9.3 系統(tǒng)之前自動(dòng)化測(cè)試
架構(gòu)圖:
?運(yùn)行流程:
1-1. Native 自動(dòng)化
這是iOS 9.3 系統(tǒng)之前自動(dòng)化測(cè)試的架構(gòu)模式。通過 Android Appium 原理的學(xué)習(xí) ,我們很容易理解 iOS Appium 原理:
Appium Client 端執(zhí)行代碼發(fā)送到 Appium Server端(Server 集成了蘋果官方的 Instruments);Server 端將一行行代碼翻譯成一條條指令,同時(shí)在手機(jī)上注入 bootstrap.jar ;Server 與該 jar 包通信將指令傳給 bootstrap.jar,jar 包調(diào)用手機(jī)里的自動(dòng)化測(cè)試框架(UIAutomation),UIAutomation框架執(zhí)行指令。
1-2. Hybrid(WebView)自動(dòng)化
通過 Android Appium 原理的學(xué)習(xí),Android 4.4 系統(tǒng)之后,Appium 支持使用 ChromeDriver 進(jìn)行對(duì) Hybrid 頁(yè)面的自動(dòng)化測(cè)試。那么 iOS 上是怎么做的呢?iOS 上早期蘋果官方就一直提供 iOS webkit debug proxy(這是蘋果官方自己開發(fā)的私有的通信協(xié)議),Appium 集成了該框架,通過它傳遞指令。
2. iOS 9.3 系統(tǒng)之后自動(dòng)化測(cè)試
Appium 在 iOS 下工具的變革:
- iOS 9 之前一直以 instruments 下的 UIAutomation為驅(qū)動(dòng)底層技術(shù)(弊端由于 instruments 的限制,單臺(tái) mac 只能對(duì)應(yīng)單臺(tái)設(shè)備);
- iOS 9.3 時(shí)代推出 XCUITest 工具,用以替代 UIAutomation;
- iOS 10 時(shí)代蘋果直接廢棄了 UIAutomation、Facebook 推出 WebDriverAgent(實(shí)現(xiàn)的 server 能夠支持單臺(tái) mac 對(duì)應(yīng)多個(gè)設(shè)備);
- Appium 在iOS 9.3 后全面采用 WebDriverAgent 的方案。
2-1. 關(guān)于 WebDriverAgent
FaceBook 出品:
- 實(shí)現(xiàn)了一個(gè) server,通過 server 可以遠(yuǎn)程控制 iOS 設(shè)備:啟動(dòng)應(yīng)用、關(guān)閉應(yīng)用、點(diǎn)擊、滾動(dòng)等操作;
- 通過連接 XCTest.framework 調(diào)用蘋果的 API 執(zhí)行動(dòng)作;
- 支持多個(gè)設(shè)備同時(shí)進(jìn)行自動(dòng)化;
- Appium、Macaca 已經(jīng)集成。
- 但是 WebDriverAgent 僅僅只提供了一個(gè) server(和 inspect 進(jìn)行元素定位),并沒有像 Appium 一樣提供 java 或 python 的 Client端去寫腳本,腳本執(zhí)行的時(shí)候發(fā)送指令給 server,然后去運(yùn)行。WebDriverAgent 要求你自己去實(shí)現(xiàn) Client 端,即拿 Java/ Python 的 WebDriver 庫(kù)進(jìn)行封裝,然后發(fā)送指令。所以 WebDriverAgent 其實(shí)就類似于 Appium server,就只是一個(gè) server。
2-2. 關(guān)于 iOS 9.3 之后的 Appium 自動(dòng)化架構(gòu)模式
Appium 很粗暴的把整個(gè) WebDriverAgent 直接集成到自己的項(xiàng)目里,然后通信機(jī)制就走 WebDriverAgent,Appium 其實(shí)就提供了一個(gè) Client 端的作用。所以 iOS 9.3 系統(tǒng)之后自動(dòng)化測(cè)試核心是 WebDriverAgent,Appium 就提供了一個(gè) Client 端來寫腳本和發(fā)送指令。
通過前面的學(xué)習(xí),我們知道 Appium 自動(dòng)化架構(gòu)模式可以用一個(gè)抽象的架構(gòu)表示,就是下面這樣的:
iOS 9.3以及之后的 Appium 自動(dòng)化架構(gòu)模式如下圖所示:
從圖中可以看出:
- Client 端是 Appium 之前本身提供的;
- Server 端是:WebDriverAgent 和 Instruments;( Appium 直接把 WebDriverAgent 整個(gè)集成進(jìn)來,Instruments 是為了支持 iOS 9.3 之前的系統(tǒng))
- 最右邊是一個(gè)手機(jī)
- 之前 Server 是和 bootstrap.jar 通信,這里 WebDriverAgent 提供了WebDriverAgentRunner (類似 bootstrap.jar 的功能),WebDriverAgent與之通信;
- WebDriverAgentRunner 是一個(gè)應(yīng)用,Client 和 server 運(yùn)行了之后,WebDriverAgentRunner 會(huì)被裝到手機(jī)上,這個(gè)應(yīng)用會(huì)接收來自 Server 的指令,并連接底層的 XCTest.framwork,并告訴 XCTest.framwork 操作手機(jī)進(jìn)行自動(dòng)化。
2-3. 必裝的軟件
Xcode、command line tool、libimobiledevice、ios-deploy、carthage、WebDriverAgent、Appium。ibimobiledevice / ideviceinstaller 庫(kù),相當(dāng)于 android 的 adb,是 Appium 底層用到的工具之一,用于獲取 iOS 設(shè)備信息。
?其常用命令如下:
- 查看當(dāng)前所連接的設(shè)備
- 安裝應(yīng)用
- 卸載應(yīng)用
- 查看設(shè)備已安裝的應(yīng)用
- 獲取設(shè)備信息
- 查看手機(jī)實(shí)時(shí)日志
- 獲取手機(jī)端崩潰報(bào)告
- 截屏
- 其他系統(tǒng)文件信息
- ios-deploy 常用命令
- carthage,項(xiàng)目依賴管理,主要是 WebDriverAgent 使用,WebDriverAgent 是用它做項(xiàng)目依賴的
- ios-deploy、ideviceinstaller 類似 android 的 adb;
- authroize-ios,iOS 授權(quán)工具,主要用于模擬器中一些權(quán)限的授權(quán);
2-4. 安裝 WebDriverAgent
1.從 FB 的 GitHub 上下載WebDriverAgent
http://github.com/facebook/WebDriverAgen2.初始化項(xiàng)目
在 WebDriverAgent 目錄下執(zhí)行:./Scripts/bootstrap.sh3.編譯 WebDriverAgent
4.替換 Appium 下的 WebDriverAgent:刪除原 WebDriverAgent 文件夾,把編譯好的 WebDriverAgent 放進(jìn)去即可
如果用 npm 安裝的目錄在:cd /usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/; 如果用 desktop 安裝的目錄在:/Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/)WebDriverAgent配置示例:
開發(fā)者賬號(hào)類型:
2-5. 開始跑腳本 Sample-Code
2-5-1. 準(zhǔn)備 APP
這里我們需要將TestApp重新編譯才能使用。
1.進(jìn)入APP 其 xxx.xcodeproj 對(duì)應(yīng)的目錄,open WebDriverAgent.xcodeproj 打開項(xiàng)目。
2. 修改該項(xiàng)目里 target 的 General 和 Build Settings列表(和上面一樣);
3.通過 Xcode 編譯運(yùn)行。
或者通過 xcodebuild 命令通過命令行編譯運(yùn)行 xcodebuild -project TestApp.xcodeproj -target TestApp -sdk iphoneos10.3 -configurationdevelopment2-5-2. 準(zhǔn)備腳本
- iOS 項(xiàng)目的 Desired_cap
- iOS 的元素定位
- Appium Desktop - Inspect(推薦)
Appium Desktop示例:
- WebDriverAgent - Inspector
app-Inspector示例:
這里說說 Appium Desktop - Inspect 是怎么使用的。
- 打開并啟動(dòng) Appium Desktop,點(diǎn)擊軟件右上角第一個(gè)按鈕 “ start inspector session”;
- 會(huì)出現(xiàn)彈窗,彈窗里配置好 Desired_caps。
- 定位方式推薦:AccessbilityId
注意:
webdriver.py 里只延展定義了針對(duì)移動(dòng)端的 API,is_displayed()、.is_enabled()() 等這些 API 可以去看Appium的客戶端庫(kù) WebDriver 即 Slenium 2 本身的。
WebDriver 本身的 API 詳見:
http://selenium-python.readthedocs.io/api.htmlAppium客戶端庫(kù)詳見:
真機(jī)運(yùn)行效果:
ios?mp.weixin.qq.com
原作品鏈接:
IOS 自動(dòng)化測(cè)試_徐志摩的博客-CSDN博客_ios自動(dòng)化測(cè)試?blog.csdn.net
總結(jié)
- 上一篇: arcgis视频教程 定制技术服务_坐标
- 下一篇: 虚拟机win7纯净版镜像_win7中文版