人工智能自动化测试探索
背景
自動(dòng)化測(cè)試技術(shù)從最初的模擬硬件方式,到基于數(shù)據(jù)驅(qū)動(dòng),基于關(guān)鍵字驅(qū)動(dòng),再到現(xiàn)在基于功能和指令驅(qū)動(dòng)的自動(dòng)化測(cè)試技術(shù),在各類(lèi)軟件項(xiàng)目中的應(yīng)用也越來(lái)越多,越來(lái)越成熟。自動(dòng)化測(cè)試技術(shù)有良好的可重復(fù)性,高并發(fā)和高效率的特點(diǎn),為各類(lèi)測(cè)試項(xiàng)目中顯著的提高了測(cè)試效率,將測(cè)試人員從繁瑣的執(zhí)行中解放了出來(lái);但是在實(shí)施自動(dòng)化測(cè)試過(guò)程中,往往測(cè)試準(zhǔn)備,測(cè)試復(fù)測(cè),結(jié)果分析和案例維護(hù)等方面需要耗費(fèi)大量的時(shí)間和資源。
隨著人工智能的普及,期望在自動(dòng)化測(cè)試的過(guò)程中還需大量投入人力的環(huán)節(jié)進(jìn)行優(yōu)化和重構(gòu);終極的目的是使得自動(dòng)化測(cè)試能夠盡可能脫離人工,實(shí)現(xiàn)真正意義上的自動(dòng)化。
項(xiàng)目目標(biāo):
形成一套智能的自動(dòng)化測(cè)試解決方案,能實(shí)現(xiàn)各種移動(dòng)app的全自動(dòng)bug探索測(cè)試工作。
1、通過(guò)一套自動(dòng)測(cè)試框架/腳本實(shí)現(xiàn)任意APP的全路徑bug探索測(cè)試工作。
2、實(shí)現(xiàn)對(duì)APP功能模塊的自動(dòng)探索,形成功能導(dǎo)圖。
3、實(shí)現(xiàn)失敗案例自動(dòng)分析和復(fù)測(cè),測(cè)試結(jié)果的智能化分析。
4、實(shí)現(xiàn)執(zhí)行過(guò)程的可視化,使得定位問(wèn)題更加清晰準(zhǔn)確。
可行性分析
一.智能識(shí)別被測(cè)對(duì)象
1.通過(guò)android工具的LazyUIAutoMatorViewer可以自動(dòng)獲取控件對(duì)象信息。
2.根據(jù)控件的特征,通過(guò)人工智能提取特征訓(xùn)練進(jìn)行業(yè)務(wù)功能的識(shí)別。
二.根據(jù)被測(cè)對(duì)象特征,智能化的開(kāi)展測(cè)試
1.對(duì)移動(dòng)應(yīng)用測(cè)試的操作方法進(jìn)行歸類(lèi)和封裝(參見(jiàn) 4、控件對(duì)象的操作封裝)。
2.根據(jù)不同的業(yè)務(wù)功能,形成特定的測(cè)試腳本。
3.根據(jù)被測(cè)應(yīng)用的對(duì)象和業(yè)務(wù)情況,智能化的開(kāi)展測(cè)試執(zhí)行。
三.智能分析測(cè)試結(jié)果,針對(duì)性補(bǔ)測(cè)
1.根據(jù)錯(cuò)誤的特征,通過(guò)人工智能識(shí)別并分類(lèi)。
2.通過(guò)分析形成的業(yè)務(wù)功能導(dǎo)圖,針對(duì)失敗的節(jié)點(diǎn)結(jié)合錯(cuò)誤特征開(kāi)展補(bǔ)測(cè)。
環(huán)境信息
測(cè)試APP:某手機(jī)銀行APP、微信APP
測(cè)試平臺(tái):Android+Appium
人工智能工具:Sklearn,ANN
腳本語(yǔ)言:Python3.6
人工智能自動(dòng)化探索流程:
流程概述:獲取應(yīng)用信息->生成操作代碼->執(zhí)行測(cè)試操作->完成探索測(cè)試->生成應(yīng)用邏輯導(dǎo)圖->被測(cè)對(duì)象分類(lèi)->匹配測(cè)試腳本->執(zhí)行測(cè)試->生成測(cè)試報(bào)告
整體的流程圖如下:
項(xiàng)目詳述:
1、應(yīng)用邏輯導(dǎo)圖
首先測(cè)試執(zhí)行之前,我們需要探索形成被測(cè)應(yīng)用的結(jié)構(gòu),功能和控件對(duì)象類(lèi)型的集合,生成應(yīng)用的應(yīng)用邏輯導(dǎo)圖。
通過(guò)大量給應(yīng)用邏輯導(dǎo)圖對(duì)應(yīng)界面圖加功能名標(biāo)簽,訓(xùn)練邏輯導(dǎo)圖知曉相關(guān)界面的功能名,最后可通過(guò)人工智能識(shí)別,自動(dòng)生成準(zhǔn)確的邏輯導(dǎo)圖。
通過(guò)邏輯導(dǎo)圖一是可以給測(cè)試執(zhí)行提供操作步驟和執(zhí)行順序;二是可以在出現(xiàn)問(wèn)題時(shí)記錄分析和自動(dòng)補(bǔ)測(cè)。
下圖展示某APP部分功能的邏輯導(dǎo)圖示例:
應(yīng)用界面探索:
由于邏輯導(dǎo)圖需對(duì)被測(cè)應(yīng)用進(jìn)行探索,探索中會(huì)不斷出現(xiàn)新的未測(cè)試過(guò)界面,但也會(huì)出現(xiàn)已經(jīng)測(cè)試完的界面,為了不重復(fù)探索,需要識(shí)別界面是否為新界面,而界面中不乏有會(huì)自動(dòng)變化的控件,比如輪播圖,或定時(shí)刷新顯示的數(shù)據(jù)
這塊可以通過(guò)人工智能識(shí)別圖像判斷是否是新的界面,方法如下:
測(cè)試對(duì)象為進(jìn)入界面的截圖,對(duì)比對(duì)象為此前所有界面截圖的數(shù)據(jù)集
使用ORB檢測(cè)器,BFMatcher提取并計(jì)算特征點(diǎn),KNN篩選結(jié)果,計(jì)算出對(duì)比圖片的相似度
主要代碼如下:
讀取圖片
img1 = cv2.imread(img1_path, cv2.IMREAD_GRAYSCALE)img2 = cv2.imread(img2_path, cv2.IMREAD_GRAYSCALE)初始化ORB檢測(cè)器
orb = cv2.ORB_create()kp1, des1 = orb.detectAndCompute(img1, None)kp2, des2 = orb.detectAndCompute(img2, None)提取并計(jì)算特征點(diǎn)
bf = cv2.BFMatcher(cv2.NORM_HAMMING)knn篩選結(jié)果
matches = bf.knnMatch(des1, trainDescriptors=des2, k=2)查看最大匹配點(diǎn)數(shù)目
good = [m for (m, n) in matches if m.distance < 0.75 * n.distance]similary = len(good) / len(matches)經(jīng)驗(yàn)證,目前參數(shù)設(shè)置相似度達(dá)到65%以上既為同一界面比較合適。但該算法也會(huì)出現(xiàn)極個(gè)別界面相似度異常(比如下面兩個(gè)畫(huà)面會(huì)被算法識(shí)別為新的界面,即低于65%),還需要完善算法或使用更好的算法。
為了保證準(zhǔn)確性,添加使用了圖像像素遍歷比較的方法,并把相似度定為98%。
把未通過(guò)KNN算法相似度低于65%但像素比對(duì)高于98%的界面,認(rèn)為是已測(cè)試過(guò)的界面。
2、智能識(shí)別業(yè)務(wù)功能
2.1 OCR文字識(shí)別
通過(guò)OCR圖片文字識(shí)別技術(shù)可以識(shí)別業(yè)務(wù)關(guān)鍵字,如儲(chǔ)蓄,存款,存單,定期,紀(jì)念日,專(zhuān)享,利率等。并對(duì)每個(gè)界面的關(guān)鍵詞組建立相關(guān)數(shù)據(jù),構(gòu)建界面關(guān)鍵詞庫(kù),錨定界面業(yè)務(wù)功能。
2.2圖像特征識(shí)別
針對(duì)圖標(biāo),圖片等對(duì)象,也可以通過(guò)卷積神經(jīng)算法得出對(duì)象特征,計(jì)算對(duì)象所屬業(yè)務(wù)功能和業(yè)務(wù)層級(jí)關(guān)系。在界面中存在文字相同的對(duì)象的情況下,可以起到很好的識(shí)別區(qū)分效果。
示意圖如下:
2.3功能界面分類(lèi)
通過(guò)之前提到的控件識(shí)別及界面標(biāo)題識(shí)別,結(jié)合具體的功能界面,可以推測(cè)出功能界面信息。
如下圖,左圖將識(shí)別為入口類(lèi)界面;中圖將識(shí)別為具體功能界面;
右圖這種在標(biāo)題位置有明顯標(biāo)識(shí)的類(lèi)型,將被識(shí)別為具體功能界面,并將把標(biāo)題權(quán)重提高,作為主要功能關(guān)鍵詞。
3、應(yīng)用控件對(duì)象識(shí)別。
應(yīng)用中的每個(gè)界面都有很多控件,并且控件的類(lèi)型多種多樣。我們需要能智能的識(shí)別出控件的類(lèi)型,路徑等信息
比如下左圖是某銀行APP首頁(yè);下右圖為控件對(duì)應(yīng)的XML信息。
通常人工編寫(xiě)腳本的過(guò)程是手動(dòng)找到控件的XML信息,編寫(xiě)Appium可識(shí)別的對(duì)象,然后加上Appium的操作代碼,完成對(duì)對(duì)象的操作指令,如下圖:
上圖紅框中,find_element_by_name,find_element_by_xpath都是找對(duì)象的不同方法,括號(hào)中的參數(shù)是對(duì)應(yīng)的數(shù)值,一般需要人工確認(rèn)才能找到對(duì)象,而find_element_by_xpath是最通用的方法,其對(duì)應(yīng)的參數(shù)就是Xpath。
click()方法是最多使用的對(duì)象操作指令,可以完成多數(shù)的頁(yè)面跳轉(zhuǎn)。
所以要機(jī)器完成appium腳本創(chuàng)作,只需要自動(dòng)找出對(duì)象和加上對(duì)應(yīng)的操作指令即可。
通過(guò)學(xué)習(xí)研究,我們總結(jié)出一些Xpath的規(guī)律,一般可以有以下幾個(gè)元素構(gòu)成:
一:text或content-desc(例如:財(cái)富)
二:resource-id(例如:cn.com.spdb.mobilebank.per:id/close_dialog)
三:instance(例如:0)
四:class(例如:android.widget.RadioButton)
通過(guò)組合后一般可以得到以下的Xpath
//android.widget.RadioButton[@resource-id=‘cn.com.spdb.mobilebank.per:id/radio_button1’]
//android.widget.TextView[@text=‘轉(zhuǎn)賬匯款’]
//android.widget.LinearLayout[@resource-id=‘cn.com.spdb.mobilebank.per:id/ll_item_adver_layout’]/android.widget.ImageView[1]
APP的控件類(lèi)型非常多,并且還有很多自定義控件(布局控件),還有一些兼容用的視圖,而對(duì)控件的操作主要是點(diǎn)擊,輸入和清空只用在文本控件的操作上。
可以參考下面的列表,包含了常用的一些控件類(lèi)型:
| TextView(文本) | Y | Y | |
| EditText(文本) | Y | Y | |
| Button(按鈕) | Y | N | |
| ImageButton(按鈕) | Y | N | |
| ToggleButton(狀態(tài)開(kāi)關(guān)) | Y | N | |
| CheckBox(單選按鈕) | Y | N | |
| RadioButton(復(fù)選按鈕) | Y | N | |
| Spinner(下拉列表) | Y | N | |
| Gally(圖像列表) | Y | N | |
| ImageSwitcher(圖像切換,可以變換圖片) | Y | N | |
| TableLayout(布局控件) | Y | N | |
| FrameLayout(布局控件) | Y | N | |
| LinearLayout(布局控件) | Y | N | |
| RelativeLayout(布局控件) | Y | N | |
| ImageView(圖像) | Y | N | |
| ListView(列表視圖) | Y | N | |
| View(視圖) | Y | N | |
| AdapterView(適配視圖) | Y | N | |
| GridView(網(wǎng)格視圖) | Y | N | |
| WebView(網(wǎng)絡(luò)視圖) | Y | N |
4、控件對(duì)象的操作封裝
安卓基礎(chǔ)控件庫(kù)
這里我列舉一些,更多的大家可以查看我之前的一篇帖子。
https://blog.csdn.net/ccq_lyc/article/details/89245315
| AndroidAppStart | 啟動(dòng)App | 啟動(dòng)應(yīng)用的某個(gè)界面(比如首頁(yè)) |
| AndroidClick | 點(diǎn)擊控件 | 點(diǎn)擊控件 |
| AndroidEdit | 編輯文本 | 密碼,特定格式文本,字體,輸入框有無(wú)焦點(diǎn) |
| AndroidTap | 點(diǎn)擊坐標(biāo) | 點(diǎn)擊坐標(biāo) |
| AndroidSwipe | 滑動(dòng) | 方向滑動(dòng),滑動(dòng)觸發(fā)行為,特定滑動(dòng)控件 |
另外移動(dòng)應(yīng)用中存在著多頁(yè)的頁(yè)面,需要上下滑,或左右滑,才能完整顯示,所有需要添加翻頁(yè)的功能,并且要考慮到不同分辨率的情況。
以下是對(duì)應(yīng)的滑動(dòng)代碼。
5、測(cè)試結(jié)果智能分析
1、錯(cuò)誤分類(lèi)識(shí)別和處理
測(cè)試中難免出現(xiàn)報(bào)錯(cuò),手工排查效率很低,特別是在大量測(cè)試后,人工排查也將費(fèi)時(shí)費(fèi)力,如果自動(dòng)識(shí)別測(cè)試錯(cuò)誤類(lèi)型,并針對(duì)性的自助處理,測(cè)試效率將大大提高。
主要有程序錯(cuò)誤,數(shù)據(jù)錯(cuò)誤,環(huán)境錯(cuò)誤三大類(lèi),處理邏輯請(qǐng)看下圖:
2、業(yè)務(wù)變更自動(dòng)識(shí)別
在功能邏輯導(dǎo)圖形成的前提下,智能對(duì)比變更前后的應(yīng)用差異,快速告知測(cè)試人員業(yè)務(wù)功能變更情況;可以有效降低變更關(guān)聯(lián)性風(fēng)險(xiǎn),提高變更分析效率。
示意圖:
3、錯(cuò)誤報(bào)告可視化
利用之前提到生成的應(yīng)用邏輯導(dǎo)圖做了一些功能擴(kuò)展,在自動(dòng)化執(zhí)行開(kāi)始后,根據(jù)驗(yàn)證情況,添加錯(cuò)誤(紅色)或提示(黃色)警告,幫助測(cè)試人員了解錯(cuò)誤信息,并通過(guò)點(diǎn)擊警告,了解詳情。
例如下圖,如果品牌特惠出現(xiàn)測(cè)試錯(cuò)誤,基金存在新的基金上線,理財(cái)產(chǎn)品短期理財(cái)理財(cái)信息變更,理財(cái)產(chǎn)品專(zhuān)屬理財(cái)數(shù)據(jù)錯(cuò)誤。
示意圖:
點(diǎn)擊短期理財(cái)警告圖標(biāo),將打開(kāi)短期理財(cái)測(cè)試記錄文件夾,查看提示信息
限于篇幅,很多地方未能介紹詳細(xì);同時(shí)也受限于精力,還有很多帶實(shí)現(xiàn)優(yōu)化的地方。后續(xù)筆者會(huì)繼續(xù)更新,補(bǔ)全整篇。也歡迎廣大的朋友們?nèi)翰呷毫?#xff0c;共同完善。
總結(jié)
以上是生活随笔為你收集整理的人工智能自动化测试探索的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 启动QQ失败,正在迁移个人文件夹,为了保
- 下一篇: 200个年轻人的薪资观:真讨厌赚钱,耽误