AppUI自动化中的图像识别的使用
人工智能現(xiàn)在使用的越來越成熟了,如人臉識(shí)別,圖像識(shí)別等,在AppUI自動(dòng)化測(cè)試中,也有越來越多的框架或是公司引入圖像識(shí)別技術(shù)來提高自動(dòng)化測(cè)試的執(zhí)行效率。圖像識(shí)別,是指利用計(jì)算機(jī)對(duì)圖像進(jìn)行處理、分析和理解,以識(shí)別各種不同模式的目標(biāo)和對(duì)象的技術(shù),是應(yīng)用深度學(xué)習(xí)算法的一種實(shí)踐應(yīng)用。?現(xiàn)階段圖像識(shí)別技術(shù)一般分為人臉識(shí)別與商品識(shí)別,人臉識(shí)別主要運(yùn)用在安全檢查、身份核驗(yàn)與移動(dòng)支付中;商品識(shí)別主要運(yùn)用在商品流通過程中,特別是無(wú)人貨架、智能零售柜等無(wú)人零售領(lǐng)域?。
圖像的傳統(tǒng)識(shí)別流程分為四個(gè)步驟:圖像采集→圖像預(yù)處理→特征提取→圖像識(shí)別。圖像識(shí)別軟件國(guó)外代表的有康耐視等,國(guó)內(nèi)代表的有圖智能、海深科技等。另外在地理學(xué)中指將遙感圖像進(jìn)行分類的技術(shù)。
一,測(cè)試框架中的圖像識(shí)別
在我們做 App 自動(dòng)化測(cè)試的時(shí)候,會(huì)發(fā)現(xiàn)很多場(chǎng)景下元素沒有 id、content-desc、text 等等屬性,并且有可能也會(huì)碰到由于開發(fā)采用的是自定義 View,View 中的元素也無(wú)法識(shí)別到,很多的自動(dòng)化測(cè)試框架對(duì)此類場(chǎng)景束手無(wú)策。Appium 在 V1.9.0 中有給我們帶來了針對(duì)于圖像識(shí)別的全新圖片元素定位的方法:-image
?
?
具體使用方法可以參考:http://testingpai.com/article/1597824416789
如果是公司自己做二次開發(fā)的自動(dòng)化測(cè)試框架,可以根據(jù)業(yè)務(wù)需要自行集成圖像識(shí)別功能,方便在做AppUI自動(dòng)化測(cè)試時(shí),提高測(cè)試效率。
二,收費(fèi)的圖像識(shí)別服務(wù)
現(xiàn)在越來越多的公司都提供了云服務(wù),在服務(wù)的產(chǎn)品當(dāng)中,都有圖像識(shí)別服務(wù),如下所示:
?
當(dāng)前提供圖像識(shí)別服務(wù)的云有:
-
百度云:https://cloud.baidu.com/solution/aiplatform/index.html
-
阿里云:https://ai.aliyun.com/image?utm_content=se_1006839984
-
騰訊云:https://cloud.tencent.com/product/generalocr
-
商湯圖像識(shí)別:https://www.sensetime.com/cn/technology-detail?categoryId=30
當(dāng)你們公司需要引入圖像識(shí)別服務(wù),來提高AppUI自動(dòng)化測(cè)試效率時(shí),就需要購(gòu)買相應(yīng)的服務(wù)。當(dāng)?shù)玫綄?duì)應(yīng)的Key后,就可以通過調(diào)用相應(yīng)的API來處理圖像識(shí)別需求,結(jié)合AppUI自動(dòng)化測(cè)試框架,處理自動(dòng)化實(shí)施過程中傳統(tǒng)框架無(wú)法操作的元素識(shí)別等操作。
三,APPUI中如何引用圖像識(shí)別
在做APPUI自動(dòng)化測(cè)試時(shí),常規(guī)的做法就是:
(1)引入自動(dòng)化測(cè)試框架,如Appium;
(2)借助于編碼語(yǔ)言,通過對(duì)App元素的屬性,如resouce_id,Xpath,text等屬性定位要操作的元素;
(3)根據(jù)測(cè)試用例的需求,對(duì)相應(yīng)的元素做指定的操作,如:click,send_keys等。
但在自動(dòng)化測(cè)試執(zhí)行過程中,就會(huì)遇到各種問題,如:
(1)被測(cè)試App元素屬性有變化,屬性被開發(fā)修改,打包的時(shí)候代碼混淆從而造成測(cè)試用例必須進(jìn)行維護(hù);
(2)測(cè)試用例執(zhí)行完成,需要檢測(cè)的內(nèi)容較多,定位檢測(cè)元素效率比較低等。
(3)被測(cè)App無(wú)法獲取元素屬性,傳統(tǒng)定位方法無(wú)法定位;
(4)App測(cè)試中喚起其他的應(yīng)用,造成driver需要切換等。
為了解決這樣的問題,引入圖像識(shí)別方法是最優(yōu)的解決方案,而圖像識(shí)別解決的App通用操作有:
1,獲取頁(yè)面所有元素,檢測(cè)需要操作的元素
通過圖像識(shí)別功能,先將用例執(zhí)行到需要操作的頁(yè)面;對(duì)當(dāng)前頁(yè)面進(jìn)行截屏,然后調(diào)用圖像識(shí)別功能,識(shí)別出當(dāng)前頁(yè)面上的所有元素。接下來需要過濾出要操作的頁(yè)面元素,如,通過元素上的文字篩選元素;通過元素類別,如image,button來區(qū)分元素;通過位置來篩選元素,如:元素在屏幕右上角,則判斷元素的位置,x大于屏幕的一半,y小于屏幕的三分之一就是要查找的元素。找到要操作的元素后,執(zhí)行需要的操作即可。
2,通過元素文字操作元素
一個(gè)應(yīng)用無(wú)論從元素屬性,還是打包混淆來影響自動(dòng)化測(cè)試,但是元素顯示的文字內(nèi)容變化的頻率是相對(duì)來說要小的多。如果能通過元素的文案來操作元素,將是不錯(cuò)的選擇。我們借助于圖像識(shí)別法,可以識(shí)別出元素對(duì)應(yīng)的文字所在的位置,然后使用driver.click(x,y),就可以單擊相應(yīng)位置的元素。此方法可以執(zhí)行單擊元素操作,當(dāng)然也可以對(duì)輸入框輸入內(nèi)容。如果對(duì)輸入框輸入內(nèi)容的話,先單擊這個(gè)輸入框,讓其處于激活狀態(tài),然后使用driver.sendKeys()輸入內(nèi)容。
3,檢測(cè)測(cè)試結(jié)果
當(dāng)一個(gè)測(cè)試用例執(zhí)行完成后,需要檢測(cè)一下用例的執(zhí)行情況。此時(shí)可以通過封裝函數(shù),獲取當(dāng)前頁(yè)面的所有文字信息,然后檢測(cè)用例執(zhí)行效果的關(guān)鍵文字,是否在當(dāng)前頁(yè)面?如果在,由認(rèn)為當(dāng)前用例執(zhí)行通過,如果不在則用例執(zhí)行失敗。
當(dāng)然,如果用例關(guān)注的檢測(cè)點(diǎn)較多,或是關(guān)注頁(yè)面布局,圖片信息等,則可以采取圖像對(duì)比法。我們截取標(biāo)準(zhǔn)的頁(yè)面顯示,然后在執(zhí)行完用例后,保存當(dāng)前頁(yè)面與標(biāo)準(zhǔn)頁(yè)面做對(duì)比,設(shè)置相似度,如99%為測(cè)試通過,否則為測(cè)試失敗。但是此方法有一定的問題,不能做兼容性測(cè)試,不同的設(shè)備顯示的內(nèi)容是不一樣的。
4,封裝業(yè)務(wù)操作
在完成了上面的基本元素的圖像操作后,就可以根據(jù)你要測(cè)試的產(chǎn)品的業(yè)務(wù)邏輯,封裝一定的業(yè)務(wù)函數(shù),從而提高代碼的通過性。如下:美團(tuán)眾包的圖像識(shí)別法進(jìn)入接單設(shè)置功能函數(shù):
/*** 進(jìn)入接單設(shè)置頁(yè)*/public void enterOrderSetting(){if(!checkEleByText("刷新列表")){startWork();}Utils.sleep(3000);clickByText("接單設(shè)置");//處理首次進(jìn)入的提醒if(checkEleByText("知道了")){clickByText("知道了");}System.out.println("進(jìn)入接單設(shè)置頁(yè)....");Utils.sleep(3000);driver.back();}四,AppUI圖像識(shí)別法使用注意事項(xiàng)
圖像識(shí)別法雖然可以解決不少AppUI自動(dòng)化存在的問題,但是我們也需要知道其劣勢(shì),合理地與傳統(tǒng)的自動(dòng)化測(cè)試框架配合,從而才能達(dá)到使我們的自動(dòng)化測(cè)試工程執(zhí)行效率最好,發(fā)揮最佳的使用用。
1,圖像識(shí)別的效率消耗
在引用語(yǔ)言,框架的圖像識(shí)別法時(shí),需要先將當(dāng)前頁(yè)面進(jìn)行截圖,然后分析圖像上的元素,文案信息。無(wú)論是什么圖像識(shí)別算法,都是有一定的效率消耗的,所以不能在測(cè)試用例中反復(fù)引用圖像識(shí)別法,要根據(jù)業(yè)務(wù)操作,安排好執(zhí)行策略,提高效率。
2,圖像識(shí)別的網(wǎng)絡(luò)消耗
如果使用的是第三方提供的圖像識(shí)別服務(wù),識(shí)別效率比我們自己的會(huì)高一些,但是就會(huì)有相應(yīng)的網(wǎng)絡(luò)請(qǐng)求。過多的網(wǎng)絡(luò)請(qǐng)求,也會(huì)影響自動(dòng)化測(cè)試的執(zhí)行效率,同時(shí)開通的服務(wù)是按次收費(fèi)的,如果測(cè)試安排的不合理,網(wǎng)絡(luò)和金錢的消耗會(huì)非常多。
3,合理結(jié)合傳統(tǒng)框架與圖像識(shí)別
在實(shí)施AppUI自動(dòng)化測(cè)試時(shí),先分析產(chǎn)品的情況,如果產(chǎn)品變化較小,元素屬性清晰,建議首先選擇通過元素屬性進(jìn)行定位,如resouce_id。針對(duì)元素屬性變化較多,頁(yè)面無(wú)法抓取屬性(競(jìng)對(duì)產(chǎn)品),H5頁(yè)面,跨App的操作,檢測(cè)元素內(nèi)容較多,檢測(cè)對(duì)象是圖片等情況,就引入圖像識(shí)別法解決相應(yīng)的問題。
五,總結(jié)
本文介紹了如何在AppUI自動(dòng)化測(cè)試中使用圖像識(shí)別法,此方法可以降低測(cè)試的維護(hù)成本,提高測(cè)試用例的執(zhí)行效率。當(dāng)然,也有一定的限制,可以根據(jù)公司的需要,可使用的資源來合理規(guī)劃你的自動(dòng)化測(cè)試架構(gòu)設(shè)計(jì),將AppUI自動(dòng)化真正地在業(yè)務(wù)中使用起來,發(fā)揮其有的使用。
總結(jié)
以上是生活随笔為你收集整理的AppUI自动化中的图像识别的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卷积神经网络如何进行图像识别的
- 下一篇: 谈谈如何使用 opencv 进行图像识别