因為公司業務需求,最近開始研究自動化測試的內容。由于同時要做 iOS、安卓和 Web 測試,我們最終選擇了 Appium 這個開源工具并基于它做一些封裝,從而能夠使用一套公共 API 完成移動端的雙端測試。本文主要會基于一些開源代碼和個人實踐,對 iOS 端的自動化測試原理做一個簡單介紹,Android 略有區別但也大致同理。
一、Appium介紹
iOS自動化測試一直很神秘,很多人都在探索和找尋最強大的那一款自動化測試工具。個人觀點,沒有最強大只有最適合,適合以后使用熟練了自然功能強大了。寫在正文之前的幾句廢話。說到功能自動化測試一般特指基于UI層面的自動化,本文中介紹的自動化測試框架是UI自動化測試框架,選擇了 Appium 這個開源工具。
1、簡介:
Appium是一個開源的、跨平臺的自動化測試工具,支持IOS、Android和FirefoxOS平臺。 通過Appium,開發者無需重新編譯app或者做任何調整,就可以測試移動應用,可以使測試代碼訪問后端API和數據庫。它是通過驅動蘋果的UIAutomation和Android的UiAutomator框架來實現的雙平臺支持,同時綁定了Selenium WebDriver用于老的Android平臺測試。開發者可以使用WebDriver兼容的任何語言編寫測試腳本,如Ruby,C#,Java, JS,OC, PHP,Python,Perl和Clojure 語言。
- 同時支持Android和iOS自動化測試,同一個手機移動項目在同一套自動化測試體系,維護起來方便;
- 支持多種腳本語言,不會將測試人員限制在某種特定語言或者框架上;
- 不需要重新編譯應用(APP)或者任何方式修改它就可以進入測試行為;
- 移動自動測試框架是開源的;
- Appium社區更活躍、有可能納入Selenium-WebDriver體系,從而成為事實上的移動應用測試標準
2、原理:
Appium提供各個語言的第三方庫,將測試腳本轉化成 WebDriver 協議下的 URL,通過 Node 服務發送到各個平臺上的代理工具,代理工具在運行過程中不斷接收 URL,根據 WebDriver 協議解析出要執行的操作,然后調用各個平臺上的原生測試框架完成測試,再將測試結果返回給 Node 服務器。
在iOS端,Appium同樣使用WebDriver協議。
-
Appium iOS封裝了蘋果公司的Instruments框架,主要用了Instrument里的UiAutomation(Apple的自動化測試框架),然后在設備中注入,如下圖所示:
bootstrap.js進行監聽.png WebDriver script 是selenium風格的測試腳本;
中間的是Appium服務,Appium啟動一個服務(4723端口),與Selenium-WebDriver測試框架相類似,Appium支持標準的WebDriver JSONWireProtocol。它提供一套Web服務,Appium Server接收WebDriver標準請求,解析請求內容,調用對應框架相應操作;
Appium Server調用instruments.js啟動一個sock server,同時分出一個子進程運行instruments.app,將bootstrap.js注入到設備用于和外界進行交互;
- 對于WebView的操作,運用了iOS webkit debug proxy來實現。
二、環境搭建
Mac OS X系統appnium環境安裝步驟:
1、通過命令行安裝Appium***
>brew install node //get node.js
>npm install -g appium //get appium
>npm install wd //get appium client
>appium & //start appium
2、通過應用程序安裝Appium
可以從地址:Appium下載到最新和歷史的Appium安裝應用程序。點擊聽診器logo確認環境是否安裝成功,提示 everything looks good,bye! 表示環境正常。
這個過程可能會碰到配置的問題:
1、node.js的配置;
2、Java Home的配置;
2、Xcode Command工具安裝等等
遇到診斷器診斷出的問題可以自行google解決,我遇到問題的解決時看的博客文章: Appium 自動化—基于 java 的 iOS 環境搭建
三、測試實踐
1、真機調試
準備工作:
① 一個蘋果的開發者ID和有效的開發者對應的配置文件及簽名文件;
② 一臺iPad或者iPhone(把UDID加入證書里);
③ 獲取待測試應用的源碼;
④ 一臺安裝了Xcode和Xcode Command Line Developer Tools的Mac機器。
Appium設置界面必填配置:
注意事項:真機調試時的app必須是包含描述文件的app文件,不能選擇虛擬器生成的沙漏里的app文件。
1、模擬器調試
準備工作:
① 獲取待測試應用的源碼;
② 一臺安裝了Xcode和Xcode Command Line Developer Tools的Mac機器。
注意:虛擬器需要選擇沙盒里面的app。其中模擬器設置可以不用填BundelID和UDID
這之后還遠遠沒有結束,剩下的還有運行Appium進行APP生成的product的壓縮包進行啟動錄制,根據自動生成的腳本編輯運行調試,漫漫長路還將繼續學習
四、總結
有很多人問,UI自動化應不應該投入,有沒有前途。這個問題沒有絕對的,要看項目的類型,總的來說針對相對比較穩定的項目,UI自動化真正的價值有兩點:
1、是驗證邏輯而非UI;
2、是代替大量UI重復操作。
如果這個事情至上而下都是支持的,想做的,投入的方向沒有錯,價值認識正確,肯定是有積極的產出的。另外,UI自動化是測試生來無法回避的一種能力,可以不依賴他,但是你需要他。最后用網上的幾句話作為文章的結尾:
UI自動化是一種能力,常常無法回避;
UI自動化會給人幻覺,要看清現實與價值;
喜歡是放肆,愛是克制。而克制是UI自動化能發揮作用的關鍵。
最近Appium桌面版本更新到了Appium version to 1.6.4
相關文章:
1、Appium社區;
2、Appium 從入門到原理;
3、Appium簡介及工作原理;
4、用實例告訴你,如何利用Appium實現移動終端UI自動化測試;