閱讀本小節,需要讀者具備如下前提條件:
1.??掌握一種編程語言基礎,如java、python等。
2.??掌握一種單元測試框架,如java語言的testng框架、python的unittest框架。
3.??掌握目前主流的UI測試框架,移動端APP測試框架Appium,或者掌握Web端測試框架Selenium。
4.??如果是Appium框架,還需要掌握如何定位控件元素,原生頁面可使用安卓SDK自帶的uiautomatorviewer工具,webview頁面可以使用Chrome瀏覽器入"chrome://inspect/#devices",該方法需要FQ或者修改hosts。
5.??如果是Web端,瀏覽器中打開F12即可。
1APP端UI分層自動化測試框架的搭建
?
?
下面以Appium+python+unittest為例介紹UI自動化框架的搭建思路
?
1. 最開始入門級別的代碼
以登錄頁面舉例,如下:
?
最開始的登錄腳本:
?
?
2. 對元素操作的公用方法進行封裝
按照上述代碼寫了很多行,發現每次操作元素都要寫同樣的代碼,一是啰嗦,二是工作量大,這樣就要將重復高的操作抽象出來進行封裝成類,及把元素定位,元素點擊,元素輸入、頁面滑動等方法進行封裝,如下代碼:
?
?
?
上述代碼只是展示了查找元素的方法,在BaseAction類中封裝元素對象的重用操作代碼筆者就不貼出來,大家明白思路即可。
?
3. 測試代碼和測試數據分離
?
開始測試數據還是寫在測試代碼中,如果用例多了,后期需要修改數據,這樣只能在測試代碼中修改,實際中沒有這樣維護代碼的,所以需要將測試數據和代碼分離,筆者選擇ini配置文件存放數據。
那么問題來了,把數據放在ini配置文件中,在代碼中怎樣獲取數據呢,這就需要將操作配置文件的方法封裝成一個單獨的類,即如下代碼
?
?
?
通過對元素操作公用方法的封裝和測試代碼和測試數據的分類,優化的腳本如下:
存放數據的ini配置文件:
app配置:
?
?
存放元素控件:
?
?
存放元素輸入的數據:
?
?
測試腳本:
?
?
4. 通用的公用類封裝
以上的腳本中,其實還缺少一些東西,如啟動appiumsever,日志記錄,發送郵件,數據庫操作等,這幾種操作都是框架公用的,所以單獨封裝成類,代碼如下:
appiumsever類:
?
?
log工具類:
?
?
還有發送郵件類和數據庫操作類筆者就不貼出來了,重在大家理解思路即可。
?
?
5. 筆者框架分層分享
現在在測試界吹噓的分層自動化,意思就是把各種代碼實現的類根據不同的功能進行分層,自動化測試框架包括的元素大致如下:
基于Appium框架運用python語言以及unittest單元測試框架,搭建的APP的UI自動化框架如下:
AppAuto/:
??apk:?存放app的apk安裝包
??config:?存放配置文件以及測試數據,把所有的項目的配置均放在????????????????????????????????????????????????????????????這里,用python支持較好的配置文件格式如ini等進行配置。
??????????實現配置和數據與代碼分離。
??screenshot:?存放測試用到的圖片以及測試時用例失敗截圖
??log:?存放日志文件,包括運行時日志runtime.log、error.log和appium.log日志
??report:?存放生成的html格式的測試報告文件
??src:源碼層
??????common層:?框架級公用方法庫
??????????chche.py:?緩存
??????????dbsever.py:?數據庫操作封裝公用類
??????????emailsever.py:?發送郵件服務封裝公用類
??????????confparser.py:?配置文件解析器
??????????log.py:?日志記錄工具
??????????appiumsever.py: appium服務公用類
??????????initappdriver.py:?初始化driver類
??????????adbconnect.py: adb連接操作
??????????...
??????????(如果還有框架級別的公用方法,還可以在該層封裝成類,通過面向對象的方式調用即可)
??????functions層:?用例級公用方法庫(元素操作公用方法封裝,基于PageObject模式對控件公用方法封裝,常用業務操作封裝)
??????????eleaction.py:?封裝元素操作的一些公共方法
??????????login.py:?登錄操作
??????????...
??????????(該層主要是封裝用例層面的公用方法,常用的操作步驟,針對PageObject思想對不同類型的頁面控件元素的操作封裝等)
??????testcase層:?測試用例層
??????????basecase.py:?測試用例基礎類
??????????testcase1.py:?測試用例1
??????????...
??????runner層:?測試套件層
??????????testrunner.py:?各種加載測試用例的方法封裝,以及生成報告
??run.py:?執行器,整個框架運行該文件即可
?
下面是筆者搭建的一個小框架,僅供參考:
?
轉載:http://mp.weixin.qq.com/s/N49ZbKMTy_irsTxd5GQ9eg(
)