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