人工智慧現在使用的越來越成熟了,如人臉識別,圖像識別等,在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自動化真正地在業務中使用起來,發揮其有的使用。