移動互聯網在改變咱們生活的同時,給各行各業都帶來了翻天覆地的變化,就拿移動應用開發來講,傳統軟件的迭代週期每每以年、月計,而到了手機上,幾乎每週都有新版本上線,一些「勤快」的應用甚至三五天就更新一個版本。如此頻繁的迭代速度給軟件測試帶來了史無前例的壓力,如何保障應用的發佈質量,是每個移動產品開發團隊必須面對的,因而移動自動化測試就成了解決敏捷開發和持續交付的最佳方案。python
今天,雲智慧的iOS開發工程師龔彪同窗就爲您分享他在移動開發過程當中積累的移動自動化測試經驗心得。程序員
自動化測試是什麼
自動化測試是把以人爲驅動的測試行爲改爲機器執行,經過精心設計的測試用例,由機器按照測試用例的執行步驟對應用進行自動操做,而後輸出結果,由測試人員進行比較。自動化測試能夠極大的節省人力、時間和硬件資源,提升測試效率。xcode
對於功能比較完整和成熟的軟件,每發佈一個新的版本,其中大部分功能和界面都和上一個版本類似或徹底相同,而這部分功能就最適合於自動化測試。性能優化
移動自動化測試的優勢
1.對程序員來講,在提交代碼以前,能夠先進行迴歸測試,這樣能提升代碼質量,加快代碼上線速度。網絡
2.自動化測試可以很方便的自動完成安裝/卸載、啓動/運行、UI適配等枯燥的手工測試環節,節省不少時間,在準確編寫測試腳本的前提下,可以幫助測試人員完成更多要求。app
3.腳本和框架通常在iOS和Android平臺是通用的,同一測試腳本適用於全部Android機型,可快速完成兼容性測試。框架
4.能夠模擬產生數據。經過一些重複的操做,產生一些簡單的數據。可以保存截圖、輸出log、輸出錯誤信息。eclipse
5.能夠長時間運行,並保證數據的正確性,避免人工測試的人爲錯誤。socket
6.Android能夠經過局域網,多設備多腳本多case連續測試。函數
7.能夠藉助透視寶對應用性能進行全面診斷。好比,用戶提供安裝有透視寶SDK的apk/ipa的安裝包,就能夠對用戶的APP進行一次總體測試,產生一份包括崩潰、內存泄漏、網絡監控和UI性能測試的具備洞察力的詳細報告。目前雲智慧的不少客戶在產品發佈以前都要先綁定透視寶SDK,以後在testin、百度雲測、騰訊優測等平臺進行測試以後才評估是否使用。
8.不須要從新編譯APP。
移動自動化測試的缺點
1.須要藉助Appium工具來錄製腳本,而Appium是第三方的開源工具,須要佈置環境。
2.可經過Xcode自帶的Instruments或者Android自帶的UIAutomator工具錄製腳本,要會簡單使用xcode和eclipse。
3.錄製成功的腳本代碼須要從新編寫,來輸出結果、進行截圖、輸出錯誤信息等,須要會編寫簡單的python或者JS腳本。
4.每次要測試一個新app的時候,都要從新設計測試用例,從新設計輸出規範和記錄內容,從新生成標準化的測試報告。
5.須要對結果進行邏輯處理,須要人工比較、分析。
6.沒辦法手機錄腳本,須要配合客戶端。
7.框架維護不易,複用率低。
8.固然必須是debug包。
手機自動化測試原理
手機自動化測試的原理爲PC上的控制端(測試工具)與手機上的agent端,經過串口、USB或無線的方式實現PC與手機終端相連,而後應用測試工具向手機發送請求/命令,手機端收到後交給agent端解析, agent將解析出的命令下發給手機的對應功能模塊,調用功能模塊模擬操做。完成操做後,手機會返回結果,agent抓取這些信息後傳回PC端,這樣就完成了一個完整的手機端自動化測試。
自動化測試的流程是:搭建框架→設計測試用例→編寫腳本→進行測試→得出結果。
自動化測試腳本是採用錄製的機制,就是記錄手工操做的鍵盤信息或者記錄XPath信息,Xcode調用的必定是Instruments,Android基本上是UIAutomator。Instruments的功能自己也很強大,能夠生成腳本,監測APP性能,好比耗電量、CPU使用率、內存使用率和流量監測。
自動化測試框架的搭建方法是通用的,須要針對不一樣的APP,不一樣的場景設計不一樣的測試框架才能進行自動化測試。
手機自動化測試經常使用技術方案
1.Appium:這是最近很是熱門的開源框架,同時支持Android和iOS,iOS部分封裝了Instruments,Android部分封裝了UIAutomator,支持多掙語言來編寫測試腳本。
UiAutomator:UiAutomator是Google仿照微軟Uiautomation提供的一套自動化框架,基於Android AccessilibilityService提供的自動化測試框架,顧名思義,主要用於UI自動化測試,提供仿真單機、滑動、文本輸入等事件,好比把一組反覆動做經過UiAutomator實現,提升測試效率。在UiAutomator中,每個UI控件都是一個UIObject對象。它支持全部的Android事件操做,經過模擬器也能運行測試,不少自動化測試腳本編寫客戶端都封裝了UiAutomator,包括百度雲測、騰訊優測等。UiAutomator是Google仿照微軟Uiautomation提供的一套自動化框架,基於Android AccessilibilityService提供。
其應用方式有如下幾種,一種是UiAutomatorView+monkey,另外一種是直接調用UiAutomator API。第一種方法和hierachyview+monkey差很少,其區別是:UiAutomatorView經過ADB向設備側發送一個dump命令,而不是創建一個socket,下載一個包含當前界面控件佈局信息的xml文件。相比較hierachyview下載的內容而言,該文件小不少。所以,從效率上講,這種方法比第一種應用模式快不少。
第二種方法則是直接調用UiAutomator框架對外提供的API,主要有UiDevice、UiSelector、UiObject等。其原理與第一種方式,即HierachyView+Monkey,差很少。其過程大體是:首先,UiAutomator測試框架經過Accessibilityservice,獲取當前窗口的控件層次關係及屬性信息,並查找到目標控件。如果點擊事件,則計算出該控件的中心點座標。其次,UiAutomator經過測試框架,注入用戶事件(點擊、輸入類操做),從而實現模擬人的操做。
UiAutomator對外提供UiAutomatorTestCase、UiDevice、UiSelector、UiObject、UiCollection、UiScrollable等類,其做用以下:
● UiAutomatorTestCase :繼承自Junit TestCase (Junit),對外提供setup、teardown等,以便初始化用例、清除環境等。
● UiDevice:此類主要包含了獲取設備狀態信息,和模擬用戶至於設備的操做兩類API。UiSelector,主要是經過必定查詢方式,定位到所要操做的UI元素。
● UiObject:UiObject可表明頁面的任意元素,它的各類屬性定位一般經過UiSelector來完成。
● UiCollection:UiCollection通常與UiSelector連用,如它的構造函數也要求提供Uiselector: UiCollection(UiSelector selector)。它的API較少,主要用以從Uiselector篩選出的元素集中挑出所要的元素:getChildByDescription(), getChildByInstance(), getChildByText() ,以及統計元素集的個數getChildCount()。
● UiScrollable:UiScrollable 用來表示能夠滑動的界面元素,其繼承關係爲UiObject -> UiCollection ->UiScrollable。
3.Instruments是Xcode自帶的性能優化工具,能夠編寫js腳本,監控CPU使用率、內存使用、流量和耗電。一個Instruments只能啓動一臺設備,不過能夠開啓多個instruments,因此理論上一臺Mac電腦可以同時測試多臺設備。
4.舉例:
1)appium錄製的腳本
腳本截圖代碼:
wd.get_screenshot_as_file(‘/users/billgong/Desktop/IMG/.png’)
輸出log:
import sys
f = file(r’/users/billgong/Desktop/LOG/1.log’,’a’)
try:…
result = ‘1’ + ’n’
f.write(result)
f.flush()
腳本截圖:
2)Xcode Instruments
腳本錄製工具 :
結語從TestIn到百度雲測,騰訊優測、阿里雲測,各大互聯網公司紛紛佈局自動化測試市場中並不斷完善本身的產品,說明自動化測試已是愈來愈流行的測試方式。若是沒有自動化測試,敏捷開發和DevOps就是空談,但這種測試方式別看實現起來簡單,真正掌握和用好卻並不容易,須要測試人員可以本身設計測試用例,還須要一點編寫腳本的能力。