從0到1搭建移動App功能自動化測試平台(0)背景介紹和平台規劃
背景
最近新加入DJI的某項目組(以下均以M指代),需要從零開始搭建功能自動化測試平台。
簡單地說,M是一個典型的移動互聯網產品,客戶端包括iOS和Android,並在app中通過WebView嵌入了H5,後端基於Ruby on Rails實現。
當前階段,M項目除了Rails Server端採用Jenkins+RSpec實現了部分的持續集成功能外,客戶端部分的部署和測試工作都還是完全依賴於手工操作。
基於當前項目的開發模式,我對整個M項目實現持續集成自動化測試的架構流程進行了規劃,初步計劃的架構圖如下圖所示。最終的目標是希望能實現:不管是Rails Server,還是App(iOS/Android),以及H5,當任意部分存在代碼提交時,系統能自動拉取最新代碼進行部署並執行自動化回歸測試,及時地將執行情況反饋給開發人員。
目標確定後,便是分階段進行實現,需要開發的模塊包括:
- 自動化測試平台(Automated Test Platform):滿足iOS/Android/H5的自動化功能測試,包括模擬器和真機的測試;
- 測試管理平台(Test Management Platform):實現自動化測試用例管理、手動下發測試任務、測試結果報表展現、Dashboard等功能;
- 打包平台(Pack System):實現iOS/Android的自動化構建;
- 服務端自動化測試(Rails):將服務端Rails的自動化測試接入測試管理平台;
- 持續集成流程打通:對Jenkins進行二次開發,與測試管理平台打通,實現全流程的持續集成自動化測試。
而本系列教程,《從0到1搭建移動App功能自動化測試平台》,便是對整個實踐過程的一個記錄。
需要說明的是,之前我個人的工作經歷主要在服務端性能測試、Android客戶端性能測試(測試開發)方向,對於客戶端的自動化測試基本上沒有經驗積累,特別是iOS系統的測試,以前更是完全沒有接觸過。因此本系列教程只能算是個人在探索路上的學習總結和記錄,可能會存在一些錯誤的觀點,還請前輩們多多指教。
自動化測試框架的選擇
在願景圖中,綠色方框(Automated Test Platform)負責移動應用客戶端(iOS/Android/H5)自動化測試的調度和執行,是整個自動化測試平台的核心。
因此,在搭建自動化測試平台之前,首先需要選擇一個合適的自動化測試框架。
對於移動應用的自動化測試框架,當前市面上已經有很多成熟的開源項目。針對當前項目的實際情況,我主要參考如下選擇標準:
- 同時支持iOS、Android、H5,且盡量能保持介面統一,減少開發維護成本;
- 編程語言支持Python/Ruby;
- 用戶量大,文檔豐富。
經過篩選,Appium無疑是最佳的選擇。
Appium簡介
對於Appium的詳細介紹,大家可參考Appium官方文檔,我就不再重複引用。
不過對於Appium,仍然有幾點很贊的理念值得強調。
- 採用Appium時,無需對被測應用做任何修改,也無需嵌入任何東西;
- Appium對iOS和Android的原生自動化測試框架進行了封裝,並提供了統一的API(WebDriver API),減少了自動化測試代碼的維護工作量;
- Appium採用Client-Server的架構設計,並採用標準的HTTP通信協議;Server端負責與iOS/Android原生測試框架交互,無需測試人員關注細節實現;Client端基本上可以採用任意主流編程語言編寫測試用例,減少了學習成本。
環境準備(iOS)
在Appium中測試iOS時,依賴於Apple開發環境,因此,在運行Appium之前需要先確保如下環境安裝正確。
- Mac OS X >= 10.7
- XCode >= 4.6.3
- Apple Developer Tools (iPhone simulator SDK, command line tools)
如上幾個環境安裝比較簡單,直接在Apple Store中安裝即可。
在安裝Appium之前,為了確保Appium的相關依賴已經準備就緒,可以使用appium-doctor來進行驗證。
appium-doctor是一個用於驗證appium安裝環境的工具,可以診斷出Node/iOS/Android環境配置方面的常見問題。
appium-doctor採用node.js編寫,採用npm即可在Terminal中進行安裝:
$ npm install appium-doctor -gn
安裝完畢後,執行appium-doctor命令即可對Appium的環境依賴情況進行檢測;指定--ios時只針對iOS環境配置進行檢測,指定--android參數時只針對Android環境配置進行檢測,若不指定則同時對iOS和Android環境進行檢測。
$ appium-doctor --ios ninfo AppiumDoctor ### Diagnostic starting ###ninfo AppiumDoctor ? Xcode is installed at: /Applications/Xcode.app/Contents/Developerninfo AppiumDoctor ? Xcode Command Line Tools are installed.ninfo AppiumDoctor ? DevToolsSecurity is enabled.ninfo AppiumDoctor ? The Authorization DB is set up properly.ninfo AppiumDoctor ? The Node.js binary was found at: /usr/local/bin/nodeninfo AppiumDoctor ? HOME is set to: /Users/Leoninfo AppiumDoctor ### Diagnostic completed, no fix needed. ###ninfo AppiumDoctor ninfo AppiumDoctor Everything looks good, bye!ninfo AppiumDoctor n
若檢測結果全部通過,則說明Appium的相關依賴已經準備就緒,接下來可以繼續安裝Appium。
安裝Appium
根據前面的介紹,Appium採用Client-Server的架構設計,因此安裝Appium時需要分別安裝Server部分和Client部分。
通常情況下,我們說的Appium都是指代的Server部分。Appium的安裝有多種方式:可以通過源碼編譯安裝,也可以在Terminal中通過npm命令安裝,另一種是直接下載appium.dmg後安裝應用程序。
在這裡推薦運行Appium app的方式,除了GUI界面操作更直觀以外,更重要的一個原因是,相比於命令行運行方式,Appium app多了一個Inspector模塊,可以調用模擬器運行被測應用程序,並且可以很方便地在預覽頁面中查看UI元素的層級結構和詳細控制項屬性,極大地提高編寫測試腳本的效率。
至於Client部分,其實我們原本可以不安裝任何東西,只需要任意選擇一門開發語言,然後直接基於WebDriver的C/S協議(JSON Wire Protocol)即可編寫自動化測試代碼。但是這樣做的話工作量會比較大,因為要去處理一些跟協議相關的工作。所幸Appium項目已經針對眾多主流的編程語言,將底層協議處理相關的工作封裝為Library,通過調用這些Library,可以極大地簡化我們編寫測試用例的工作量。
而說的需要安裝的Client部分,其實也就是安裝這些Library。選定編寫測試用例的語言後,我們就可以針對性地進行安裝。
例如,如果選擇Ruby語言,那麼需要安裝的Library就是appium_lib,安裝方式如下:
$ gem install appium_libn
如果選擇Python語言,那麼需要安裝的Library就是Appium-Python-Client,安裝方式如下:
$ pip install Appium-Python-Clientn
對於其它編程語言,請自行參考官方文檔。
To be continued ...
iOS的自動化測試環境已基本準備就緒了,接下來我們想做的第一件事,就是在模擬器中運行iOS應用。
在下一篇文章中,我們將從clone項目源碼為起點,編譯生成iOS app,在Appium中調用模擬器中運行iOS app,並分享實踐過程中遇到的一些坑。
Read More ...
公眾號:DebugTalk
原文鏈接:從0到1搭建移動App功能自動化測試平台(0):背景介紹和平台規劃推薦閱讀:
※WEB自動化3:準備Selenium環境
※selenium元素定位 提高篇 xpath定位元素
※Python實踐3-Tenacity提高自動測試健壯性
※如何學習自動化測試?