AppUI 自動化中的影像識別的使用

愛偷懶的QA發表於2020-11-30

人工智慧現在使用的越來越成熟了,如人臉識別,影像識別等,在AppUI自動化測試中,也有越來越多的框架或是公司引入影像識別技術來提高自動化測試的執行效率。影像識別,是指利用計算機對影像進行處理、分析和理解,以識別各種不同模式的目標和物件的技術,是應用深度學習演算法的一種實踐應用。 現階段影像識別技術一般分為人臉識別與商品識別,人臉識別主要運用在安全檢查、身份核驗與移動支付中;商品識別主要運用在商品流通過程中,特別是無人貨架、智慧零售櫃等無人零售領域 。
影像的傳統識別流程分為四個步驟:影像採集→影像預處理→特徵提取→影像識別。影像識別軟體國外代表的有康耐視等,國內代表的有圖智慧、海深科技等。另外在地理學中指將遙感影像進行分類的技術。

一,測試框架中的影像識別

在我們做 App 自動化測試的時候,會發現很多場景下元素沒有 id、content-desc、text 等等屬性,並且有可能也會碰到由於開發採用的是自定義 View,View 中的元素也無法識別到,很多的自動化測試框架對此類場景束手無策。Appium 在 V1.9.0 中有給我們帶來了針對於影像識別的全新圖片元素定位的方法:-image

具體使用方法可以參考:http://testingpai.com/article/1597824416789
如果是公司自己做二次開發的自動化測試框架,可以根據業務需要自行整合影像識別功能,方便在做AppUI自動化測試時,提高測試效率。

二,收費的影像識別服務

現在越來越多的公司都提供了雲服務,在服務的產品當中,都有影像識別服務,如下所示:

當前提供影像識別服務的雲有:
百度雲:https://cloud.baidu.com/solution/aiplatform/index.html
阿里雲:https://ai.aliyun.com/image?utm_content=se_1006839984
騰訊雲:https://cloud.tencent.com/product/generalocr
商湯影像識別:https://www.sensetime.com/cn/technology-detail?categoryId=30
當你們公司需要引入影像識別服務,來提高AppUI自動化測試效率時,就需要購買相應的服務。當得到對應的Key後,就可以通過呼叫相應的API來處理影像識別需求,結合AppUI自動化測試框架,處理自動化實施過程中傳統框架無法操作的元素識別等操作。

三,APPUI中如何引用影像識別

在做APPUI自動化測試時,常規的做法就是:
(1)引入自動化測試框架,如Appium;
(2)藉助於編碼語言,通過對App元素的屬性,如resouce_id,Xpath,text等屬性定位要操作的元素;
(3)根據測試用例的需求,對相應的元素做指定的操作,如:click,send_keys等。
但在自動化測試執行過程中,就會遇到各種問題,如:
(1)被測試App元素屬性有變化,屬性被開發修改,打包的時候程式碼混淆從而造成測試用例必須進行維護;
(2)測試用例執行完成,需要檢測的內容較多,定位檢測元素效率比較低等。
(3)被測App無法獲取元素屬性,傳統定位方法無法定位;
(4)App測試中喚起其他的應用,造成driver需要切換等。
為了解決這樣的問題,引入影像識別方法是最優的解決方案,而影像識別解決的App通用操作有:
1,獲取頁面所有元素,檢測需要操作的元素
通過影像識別功能,先將用例執行到需要操作的頁面;對當前頁面進行截圖,然後呼叫影像識別功能,識別出當前頁面上的所有元素。接下來需要過濾出要操作的頁面元素,如,通過元素上的文字篩選元素;通過元素類別,如image,button來區分元素;通過位置來篩選元素,如:元素在螢幕右上角,則判斷元素的位置,x大於螢幕的一半,y小於螢幕的三分之一就是要查詢的元素。找到要操作的元素後,執行需要的操作即可。
2,通過元素文字操作元素
一個應用無論從元素屬性,還是打包混淆來影響自動化測試,但是元素顯示的文字內容變化的頻率是相對來說要小的多。如果能通過元素的文案來操作元素,將是不錯的選擇。我們藉助於影像識別法,可以識別出元素對應的文字所在的位置,然後使用driver.click(x,y),就可以單擊相應位置的元素。此方法可以執行單擊元素操作,當然也可以對輸入框輸入內容。如果對輸入框輸入內容的話,先單擊這個輸入框,讓其處於啟用狀態,然後使用driver.sendKeys()輸入內容。
3,檢測測試結果
當一個測試用例執行完成後,需要檢測一下用例的執行情況。此時可以通過封裝函式,獲取當前頁面的所有文字資訊,然後檢測用例執行效果的關鍵文字,是否在當前頁面?如果在,由認為當前用例執行通過,如果不在則用例執行失敗。
當然,如果用例關注的檢測點較多,或是關注頁面佈局,圖片資訊等,則可以採取影像對比法。我們擷取標準的頁面顯示,然後在執行完用例後,儲存當前頁面與標準頁面做對比,設定相似度,如99%為測試通過,否則為測試失敗。但是此方法有一定的問題,不能做相容性測試,不同的裝置顯示的內容是不一樣的。
4,封裝業務操作
在完成了上面的基本元素的影像操作後,就可以根據你要測試的產品的業務邏輯,封裝一定的業務函式,從而提高程式碼的通過性。如下:美團眾包的影像識別法進入接單設定功能函式:


/**
* 進入接單設定頁
*/

public void enterOrderSetting()
{
if(!checkEleByText("重新整理列表"))
{
startWork();
}
Utils.sleep(3000);
clickByText("接單設定");
//處理首次進入的提醒
if(checkEleByText("知道了"))
{
clickByText("知道了");
}
System.out.println("進入接單設定頁....");
Utils.sleep(3000);
driver.back();
}

四,AppUI影像識別法使用注意事項

影像識別法雖然可以解決不少AppUI自動化存在的問題,但是我們也需要知道其劣勢,合理地與傳統的自動化測試框架配合,從而才能達到使我們的自動化測試工程執行效率最好,發揮最佳的使用用。
1,影像識別的效率消耗
在引用語言,框架的影像識別法時,需要先將當前頁面進行截圖,然後分析影像上的元素,文案資訊。無論是什麼影像識別演算法,都是有一定的效率消耗的,所以不能在測試用例中反覆引用影像識別法,要根據業務操作,安排好執行策略,提高效率。
2,影像識別的網路消耗
如果使用的是第三方提供的影像識別服務,識別效率比我們自己的會高一些,但是就會有相應的網路請求。過多的網路請求,也會影響自動化測試的執行效率,同時開通的服務是按次收費的,如果測試安排的不合理,網路和金錢的消耗會非常多。
3,合理結合傳統框架與影像識別
在實施AppUI自動化測試時,先分析產品的情況,如果產品變化較小,元素屬性清晰,建議首先選擇通過元素屬性進行定位,如resouce_id。針對元素屬性變化較多,頁面無法抓取屬性(競對產品),H5頁面,跨App的操作,檢測元素內容較多,檢測物件是圖片等情況,就引入影像識別法解決相應的問題。

五,總結

本文介紹瞭如何在AppUI自動化測試中使用影像識別法,此方法可以降低測試的維護成本,提高測試用例的執行效率。當然,也有一定的限制,可以根據公司的需要,可使用的資源來合理規劃你的自動化測試架構設計,將AppUI自動化真正地在業務中使用起來,發揮其有的使用。

相關文章