1. 機(jī)器學(xué)習(xí)
在上一部分,我們介紹了通過自愈技術(shù)解決自動化測試過程中對象識別問題。
但是在自動化測試過程中,我們?nèi)匀贿€會面臨其他問題:
- 仍然需要人工獲取定位方式;
- 如果是通過Canvas繪制出來的對象,如何識別元素 (如Flutter Web)。
等等。
雖然自愈技術(shù)在傳統(tǒng)的自動化測試中增加了一些容錯能力。但是本質(zhì)上還是基于元素定位的對象識別技術(shù),用到的還是傳統(tǒng)的DOM定位技術(shù),如XPath或者是CSS定位器。
而我們知道,移動端和Web端的運(yùn)行環(huán)境復(fù)雜,外部干擾因素很容易破壞自動化腳本運(yùn)行的穩(wěn)定性,這是元素定位器脆性本質(zhì)導(dǎo)致的。
所以業(yè)界也一直在持續(xù)探索更穩(wěn)定的對象識別技術(shù)。在早期我們使用到了CV(Computer Vision)計(jì)算機(jī)視覺 +OCR(Optical Character Recognition)光學(xué)字符設(shè)別技術(shù)。
而CV和OCR是基于圖像處理和統(tǒng)計(jì)機(jī)器學(xué)習(xí)方法,比如業(yè)內(nèi)比較流行的自動化測試框架airtest,就是基于CV技術(shù)來進(jìn)行智能控件識別的。通過OCR及圖像識別能力,實(shí)現(xiàn)相同流程下,一套自動化腳本可以在多平臺上執(zhí)行的能力,大大降低了腳本編寫及后期維護(hù)成本。
目前業(yè)界也在實(shí)踐與探索基于機(jī)器學(xué)習(xí)技術(shù)的CV和OCR來解決自動化測試學(xué)習(xí)成本高、維護(hù)成本高、Hybird識別差、跨應(yīng)用能力差,以及不支持跨平臺等方面的問題。
2. 智能識別
在UI頁面中,我們的信息主要由圖像和文字構(gòu)成。如何高效地識別基于圖像和文字的控件對象,是當(dāng)前自動化測試不得不面臨的問題。為了解決之前基于DOM技術(shù)的元素定位不穩(wěn)定,以及后期的維護(hù)成本。目前在UI控件識別上有兩種方式:一個是基于CV技術(shù)的圖像識別,一個是基于OCR技術(shù)的文字識別。
2.1 基于CV的圖像識別
傳統(tǒng)的CV
在傳統(tǒng)方式下,我們主要是基于圖像特征識別技術(shù):
提到圖像識別算法一定繞不開OpenCV,常用的是SIFT算法,核心就是提取出圖片當(dāng)中的一些關(guān)鍵特征,這些特征在不同的機(jī)型,在不同的分辨率下面有很好的適應(yīng)性?;趥鹘y(tǒng)特征識別技術(shù)的處理過程如下圖所示:

基于深度學(xué)習(xí)的CV
這種方法比現(xiàn)行的定位策略( image )更靈活,因?yàn)槲覀兛梢杂肅NN,或者其他深度學(xué)習(xí)框架來訓(xùn)練 AI 模型去識別控件圖標(biāo),并不需要知道上下文,也不需要精確匹配控件圖標(biāo)。也就是說我們可以能跨應(yīng)用和平臺去找一個如 “購物車” 的圖標(biāo)這樣的控件,不需要在意一些細(xì)微的差別。基于深度學(xué)習(xí)的處理流程如下圖所示:

盡管基于深度學(xué)習(xí)的CV具有更強(qiáng)的能力,但是傳統(tǒng)的方式依然有不可替代的優(yōu)勢,值得我們繼續(xù)學(xué)習(xí)。如從目前來看深度學(xué)習(xí)仍然需要大量的數(shù)據(jù),而傳統(tǒng)的方式在這方面就會節(jié)省很大的成本。對于一些比較簡單的識別任務(wù),我們更推薦傳統(tǒng)的CV方式。
2.2 基于OCR文字識別
OCR可識別屏幕上的預(yù)定義字符。使用OCR的軟件將采用“最佳猜測”的方式來確定圖像是否與字符匹配,以便將該圖像轉(zhuǎn)換為計(jì)算機(jī)可以處理的文本。傳統(tǒng)的OCR基于圖像處理(二值化、連通域分析、投影分析等)和統(tǒng)計(jì)機(jī)器學(xué)習(xí)(Adaboost、SVM)。
傳統(tǒng)的OCR只能處理相對簡單的場景,如:簡單的頁面布局、前景和背景信息便于區(qū)分及每個文本字符容易分割。隨著我們的測試對象月來越復(fù)雜,頁面布局,樣式等多樣化的場景下,傳統(tǒng)OCR的精準(zhǔn)度也收到了挑戰(zhàn)。
隨著深度學(xué)習(xí)的發(fā)展,我們可以通過新的算法技術(shù)來解決傳統(tǒng)OCR的局限性。
3. 案例實(shí)踐
在業(yè)內(nèi),大部分基于AI的自動化測試平臺均采用了CV+OCR結(jié)合的智能識別技術(shù),來降低自動化測試腳本編寫成本以及后期的維護(hù)成本。
我們分別以基于OpenCV的airtest 平臺為例:
基于OpenCV的UI自動化 - Airtest
Airtest主要用到了兩種傳統(tǒng)的OpenCV匹配算法:1. 模版匹配, 2 特征匹配
兩種匹配算法的特點(diǎn)如下:
模板匹配
- 無法跨分辨率識別
- 一定有相對最佳的匹配結(jié)果
- 方法名:"tpl", "mstpl"
特征點(diǎn)匹配
- 跨分辨率識別
- 不一定有匹配結(jié)果
- 方法名列表:["kaze", "brisk", "akaze", "orb", "sift", "surf", "brief"]
在Airtest中可以自己配置選擇使用的匹配算法。由于兩種匹配算法各有利弊,因此一般默認(rèn)是選擇這幾種匹配算法組合,算法依次進(jìn)行圖像識別,找到結(jié)果將停止識別,未找到結(jié)果將會一直按照這個算法的識別順序一直循環(huán)識別直到超時。
如何判斷圖像識別成功或者失敗呢?Airtest里面有兩個重要的名詞:閥值和可信度,閥值是可以配置的,一般默認(rèn)為0.7,可信度是算法執(zhí)行結(jié)束后計(jì)算出來的可能性概率,當(dāng) 可信度>闕值 的時候,程序會認(rèn)為 找到了最佳的匹配結(jié)果 ;而當(dāng) 可信度<闕值 的時候,程序則會認(rèn)為 沒有找到最佳的匹配結(jié)果 。
如下這個例子:在Airtest中操作網(wǎng)易云音樂APP :

Touch(“圖片”) 的原理如下:

Airtest本身并沒有直接提供OCR方式識別,不過我們可以通過集成開源的Tesseract-OCR庫來支持OCR識別能力。
面臨的挑戰(zhàn):
基于傳統(tǒng)的OpenCV的圖像識別,主要的問題是圖像的特征識別不夠準(zhǔn)確,特別是在圖像本身的特征比較少,如有一大片白色背景等,或者是動態(tài)元素等。同時傳統(tǒng)的識別成功率平均也就80%左右,還達(dá)不到人工的95%的準(zhǔn)確率,因此在傳統(tǒng)方式下,我們只能通過添加更多特征信息來優(yōu)化識別率,但是想要匹配人工的準(zhǔn)確率,傳統(tǒng)的統(tǒng)計(jì)機(jī)器學(xué)習(xí)方式很難達(dá)到。
解決這個問題就需要更強(qiáng)的泛化能力,目前更多的是基于CNN等深度學(xué)習(xí)技術(shù)來解決此類問題。我們這里就不過多展開,大家可以參考Appium with AI項(xiàng)目。
詳情:https://appiumpro.com/editions/39-early-stage-ai-for-appium-test-automation
4. 未來展望
隨著DL,RL和NLP等技術(shù)的不斷發(fā)展,未來是不是完全可以將我們的用戶故事自動轉(zhuǎn)化為自動化測試用例,做到了真正的零代碼呢,目前業(yè)內(nèi)也有這樣的探索了,我們也在持續(xù)跟進(jìn)。
CV和AI算法的加持讓UI自動化測試在對象識別上有了新的突破,但依然無法擺脫軟件層API操作的局限,受所在操作系統(tǒng)限制,依舊存在部分特定場景下元素?zé)o法識別的問題(如系統(tǒng)內(nèi)Push消息操作);
我們可以看到業(yè)內(nèi)領(lǐng)先的公司在嘗試自動機(jī)械臂方式,來解決這個問題。
如下圖阿里的Robot-XT:

那么這些技術(shù)是否是大廠的“專利”呢? 我想答案是否定的,未來AI技術(shù)一定也會像水電煤一樣,變成最基礎(chǔ)的底層設(shè)施,我們只需要會用即可。
5. 總結(jié)
在本文中,我們介紹了兩種應(yīng)用比較廣泛的自動化測試新技術(shù),目的是幫助大家了解自動化測試未來的發(fā)展趨勢,從而更好地利用新技術(shù)來提高我們的測試效率。
自動化測試未來趨勢不僅僅是這兩種,還有如智能化探索性測試,智能遍歷測試以及智能驗(yàn)證等。關(guān)于智能遍歷所用到的技術(shù),大家可以參考DQN的介紹。