背景
自動化測試技術從最初的模擬硬件方式,到基于數據驅動,基于關鍵字驅動,再到現在基于功能和指令驅動的自動化測試技術,在各類軟件項目中的應用也越來越多,越來越成熟。自動化測試技術有良好的可重復性,高并發和高效率的特點,為各類測試項目中顯著的提高了測試效率,將測試人員從繁瑣的執行中解放了出來;但是在實施自動化測試過程中,往往測試準備,測試復測,結果分析和案例維護等方面需要耗費大量的時間和資源。
隨著人工智能的普及,期望在自動化測試的過程中還需大量投入人力的環節進行優化和重構;終極的目的是使得自動化測試能夠盡可能脫離人工,實現真正意義上的自動化。
項目目標:
形成一套智能的自動化測試解決方案,能實現各種移動app的全自動bug探索測試工作。
1、通過一套自動測試框架/腳本實現任意APP的全路徑bug探索測試工作。
2、實現對APP功能模塊的自動探索,形成功能導圖。
3、實現失敗案例自動分析和復測,測試結果的智能化分析。
4、實現執行過程的可視化,使得定位問題更加清晰準確。
可行性分析
一.智能識別被測對象
1.通過android工具的LazyUIAutoMatorViewer可以自動獲取控件對象信息。
2.根據控件的特征,通過人工智能提取特征訓練進行業務功能的識別。
二.根據被測對象特征,智能化的開展測試
1.對移動應用測試的操作方法進行歸類和封裝(參見 4、控件對象的操作封裝)。
2.根據不同的業務功能,形成特定的測試腳本。
3.根據被測應用的對象和業務情況,智能化的開展測試執行。
三.智能分析測試結果,針對性補測
1.根據錯誤的特征,通過人工智能識別并分類。
2.通過分析形成的業務功能導圖,針對失敗的節點結合錯誤特征開展補測。
環境信息
測試APP:某手機銀行APP、微信APP
測試平臺:Android+Appium
人工智能工具:Sklearn,ANN
腳本語言:Python3.6
人工智能自動化探索流程:
流程概述:獲取應用信息->生成操作代碼->執行測試操作->完成探索測試->生成應用邏輯導圖->被測對象分類->匹配測試腳本->執行測試->生成測試報告
整體的流程圖如下:
項目詳述:
1、應用邏輯導圖
首先測試執行之前,我們需要探索形成被測應用的結構,功能和控件對象類型的集合,生成應用的應用邏輯導圖。 通過大量給應用邏輯導圖對應界面圖加功能名標簽,訓練邏輯導圖知曉相關界面的功能名,最后可通過人工智能識別,自動生成準確的邏輯導圖。
通過邏輯導圖一是可以給測試執行提供操作步驟和執行順序;二是可以在出現問題時記錄分析和自動補測。
下圖展示某APP部分功能的邏輯導圖示例:
應用界面探索:
由于邏輯導圖需對被測應用進行探索,探索中會不斷出現新的未測試過界面,但也會出現已經測試完的界面,為了不重復探索,需要識別界面是否為新界面,而界面中不乏有會自動變化的控件,比如輪播圖,或定時刷新顯示的數據
這塊可以通過人工智能識別圖像判斷是否是新的界面,方法如下:
測試對象為進入界面的截圖,對比對象為此前所有界面截圖的數據集
使用ORB檢測器,BFMatcher提取并計算特征點,KNN篩選結果,計算出對比圖片的相似度
主要代碼如下:
讀取圖片
img1 = cv2.imread(img1_path, cv2.IMREAD_GRAYSCALE) img2 = cv2.imread(img2_path, cv2.IMREAD_GRAYSCALE) |
初始化ORB檢測器
orb = cv2.ORB_create() kp1, des1 = orb.detectAndCompute (img1, None) kp2, des2 = orb.detectAndCompute (img2, None) |
提取并計算特征點
bf = cv2.BFMatcher ((cv2.NORM_HAMMING) |
knn篩選結果
matches = bf.knnMatch (des1, trainDescriptors=des2, k=2) |
查看最大匹配點數目
good = [m for (m, n) in matches if m.distance < 0.75 * n.distance] similary = len(good) / len(matches) |
經驗證,目前參數設置相似度達到65%以上既為同一界面比較合適。但該算法也會出現極個別界面相似度異常(比如下面兩個畫面會被算法識別為新的界面,即低于65%),還需要完善算法或使用更好的算法。
為了保證準確性,添加使用了圖像像素遍歷比較的方法,并把相似度定為98%。
把未通過KNN算法相似度低于65%但像素比對高于98%的界面,認為是已測試過的界面。
2、智能識別業務功能
2.1 OCR文字識別
通過OCR圖片文字識別技術可以識別業務關鍵字,如儲蓄,存款,存單,定期,紀念日,專享,利率等。并對每個界面的關鍵詞組建立相關數據,構建界面關鍵詞庫,錨定界面業務功能。
2.2圖像特征識別
針對圖標,圖片等對象,也可以通過卷積神經算法得出對象特征,計算對象所屬業務功能和業務層級關系。在界面中存在文字相同的對象的情況下,可以起到很好的識別區分效果。
示意圖如下:
2.3功能界面分類
通過之前提到的控件識別及界面標題識別,結合具體的功能界面,可以推測出功能界面信息。
如下圖,左圖將識別為入口類界面;中圖將識別為具體功能界面;
右圖這種在標題位置有明顯標識的類型,將被識別為具體功能界面,并將把標題權重提高,作為主要功能關鍵詞。
3、應用控件對象識別。
應用中的每個界面都有很多控件,并且控件的類型多種多樣。我們需要能智能的識別出控件的類型,路徑等信息
比如下左圖是某銀行APP首頁;下右圖為控件對應的XML信息。
通常人工編寫腳本的過程是手動找到控件的XML信息,編寫Appium可識別的對象,然后加上Appium的操作代碼,完成對對象的操作指令,如下圖:
上圖紅框中,find_element_by_name,find_element_by_xpath都是找對象的不同方法,括號中的參數是對應的數值,一般需要人工確認才能找到對象,而find_element_by_xpath是最通用的方法,其對應的參數就是Xpath。
click()方法是最多使用的對象操作指令,可以完成多數的頁面跳轉。
所以要機器完成appium腳本創作,只需要自動找出對象和加上對應的操作指令即可。
通過學習研究,我們總結出一些Xpath的規律,一般可以有以下幾個元素構成:
一:text或content-desc(例如:財富)
二:resource-id(例如:cn.com.spdb.mobilebank.per:id/close_dialog)
三:instance(例如:0)
四:class(例如:android.widget.RadioButton)
通過組合后一般可以得到以下的Xpath
//android.widget.RadioButton[@resource-id=‘cn.com.spdb.mobilebank.per:id/radio_button1’]
//android.widget.TextView[@text=‘轉賬匯款’]
//android.widget.LinearLayout[@resource-id=
‘cn.com.spdb.mobilebank.per:id/ll_item_adver_layout’]/android.widget.ImageView[1]
APP的控件類型非常多,并且還有很多自定義控件(布局控件),還有一些兼容用的視圖,而對控件的操作主要是點擊,輸入和清空只用在文本控件的操作上。
可以參考下面的列表,包含了常用的一些控件類型:
4、控件對象的操作封裝
安卓基礎控件庫
另外移動應用中存在著多頁的頁面,需要上下滑,或左右滑,才能完整顯示,所有需要添加翻頁的功能,并且要考慮到不同分辨率的情況。
以下是對應的滑動代碼。
5、測試結果智能分析
1、錯誤分類識別和處理
測試中難免出現報錯,手工排查效率很低,特別是在大量測試后,人工排查也將費時費力,如果自動識別測試錯誤類型,并針對性的自助處理,測試效率將大大提高。
主要有程序錯誤,數據錯誤,環境錯誤三大類,處理邏輯請看下圖:
2、業務變更自動識別
在功能邏輯導圖形成的前提下,智能對比變更前后的應用差異,快速告知測試人員業務功能變更情況;可以有效降低變更關聯性風險,提高變更分析效率。
示意圖:
3、錯誤報告可視化
利用之前提到生成的應用邏輯導圖做了一些功能擴展,在自動化執行開始后,根據驗證情況,添加錯誤(紅色)或提示(黃色)警告,幫助測試人員了解錯誤信息,并通過點擊警告,了解詳情。
例如下圖,如果品牌特惠出現測試錯誤,基金存在新的基金上線,理財產品短期理財理財信息變更,理財產品專屬理財數據錯誤。
示意圖:
點擊短期理財警告圖標,將打開短期理財測試記錄文件夾,查看提示信息
原文轉自:https://blog.csdn.net/ccq_lyc/article/details/90296165