引子:
本文是林奕在騰訊 DevDays 2018 分享內容的脫敏整理,介紹了 CSIG 測試開發中心(前 SNG 測試開發中心)在自動化測試領域所做的智能化嘗試。

大致分成下面幾部分:
- 使用AI面對和解決的問題是什么
- AI帶來的曙光
- 使用了哪些技術,效果是怎么樣的
- 未來展望
UI自動化測試的問題
從業務角度看自動化測試,看到的東西僅僅是冰山浮在水面上的一小部分,而在自動化測試深入的過程中,會發現有很多看不見的坑在冰山下面。
1 自動化測試的復雜度障礙
舉一個例子來說明, UI自動化測試工具首要要解決的是識別UI中的各個元素,因為安卓、iOS、Windows這樣的操作系統有非常不同的表現邏輯,導致測試工具要針對不同的平台區分不同版本的工具,QTA測試工具也是按照這種結構去划分的。這是在冰山之上很顯而易見的部分。

(冰山之上)
但是隨着新技術的發展,越來越多的研發框架引入,如網頁渲染、UI引擎甚至3D渲染引擎接連出現。這些數量繁多的開發框架,因為實現原理不同,在自動化測試過程中都會出現很多問題。

(冰山之下)
因為技術繁多,會讓負責自動化測試工具的同學很受挫折,每一項技術都需要針對性的方案去解決,又面對非常多的場景要考慮兼容通用。
如下面的例子,一個軟件界面,在人眼中看到的是完整的樣子,但在UI自動化工具眼中,就要拆分成多個不同的模塊使用不同技術來識別。

這是一個混合客戶端的例子,但在現實中往往會發現,在一個界面中,經常會混合很多種渲染技術。每當一個新的UI渲染技術出現,自動化工具都要進行適配,這樣下來不僅成本會非常高,也是一件很難做兼容的事情。這樣就給自動化測試工具帶來了無盡的挑戰,是自動化工具開發遇到的困難點。
2 自動化測試同質元素識別障礙
第二個例子是一個鬧鍾應用的界面,但是在控件樹上看起來,卻因為區分不出內容,而只能把每一個時間元素同等對待。工具沒有好辦法來識別哪一個條目是北京的鬧鍾。

雖然通過無障礙化產品設計的方式,可以部分解決這一問題,但取決於產品的定位,並不是每一個產品都會支持到無障礙化。除了無障礙之外,出現了很多例如React之類的響應式布局,開發在寫代碼時,很難預料實際運行時的UI結構,更難在開發時提供給測試使用的UI數據結構。這樣一來,又給自動化測試增加了難度。
3 自動化測試成效問題
在談到自動化測試時,很多同學提到投入產出比。成效是推行自動化測試很重要的問題。

如上圖,縱坐標是自動化測試的投入度,橫坐標是隨着產品演進過程的投入時間。自動化測試有兩種投入方式,分別是腳本式和錄制回放式。腳本式在項目初期投入較高,而后會隨着產品的功能逐漸完善而逐漸降低維護成本。但業務往往由於腳本式自動化測試初期投入過高,而選擇初期比較簡單上手的錄制回放式方案。而錄制回放式方法由於界面變動就需要重新錄制腳本,導致后續版本要投入與之前相同的工作量,而無法最終收斂。
另外一種場景,業務選擇了腳本式自動化測試方案。但是投入並不徹底,導致隨着功能開發迭代,自動化測試腳本的維護工作量並不收斂。這代表這次自動化測試的實施是失敗的。如下圖:

這其中的原因,最可能是沒有做好自動化測試的變更管理——變化是影響UI自動化測試成效的關鍵因素。
控件識別和定位技術是自動化測試技術的關鍵難題
把以上三個問題做一下歸納,會發現自動化測試一個核心需要攻破的難點,那就是控件識別和定位。它是影響自動化測試成效的關鍵因素之一。
AI帶來的曙光
QTA所做的AI嘗試
QTA是在SNG跑了很多年的自動化測試平台,已經接入了170個活躍的公司產品和項目。僅2018年Q1,就自動化執行了一百四十萬個測試任務、五千萬個用例,按成時間平均每秒就有3個用例被執行。這些數據基礎,為QTA引入AI技術提供了可靠的數據來源。
QTAMetis就是為了解決控件識別和定位技術這一關鍵難題,而引入AI優化能力。

(傳統自動化測試識別和定位)

(Metis AI自動化測試識別和定位)
應用成熟的目標檢測技術,可以看到Metis已經成功的把對象定位出來。而后通過分類器,把每一個元素分類和識別出來,例如哪些是可以點擊的按鈕,哪些是一個圖片區域。然后通過OCR技術,把原件中對應的文本提取出來;如果是Logo,則通過圖片的分類器把對應的Logo類型分類出來,而映射為特定的文本。
可以看到,這一實現結果和人看到的是一樣的,與人類的認知相仿。已經基本脫離了APP本身的代碼實現,也不需要再關注應用后面的UI實現技術,可以解決文章前面所述的幾個問題。
同時還有另一個好處,比如某一個控件在新版本換了位置,對自動化測試沒有任何影響。在成效方面,也減少了變更時增加的維護量。
在這種技術下,自動化測試腳本變得簡單化:

(更接近自然語言的自動化測試腳本)
(腳本所實現的自動化測試效果,視頻速度減慢15倍)
實際測試的速度會比視頻快很多,雖然過程中出現一些誤報,但80%的情況下已經能夠滿足自動化的要求。

(傳統UI自動化測試與Metis的區別)
可以看到,AI已經可以使自動化測試實現一個質的飛躍。

但就像電動汽車尚未在馬路上普及一樣,在使用的時候還有若干個問題。
比如下圖的界面,聯系人有兩個,容易導致AI混淆而進行誤操作。

我們人之所以知道用哪個聯系人,是因為人類有先前的知識積累,但是AI並沒有類似的經驗,導致沒法分辨。
第二個問題,並不是全部的Logo都能識別出來,特別對於業務自定義的Logo和圖案,識別的成本非常高。例如下圖中用戶自定義的厘米秀按鈕:

為了解決這些問題,就像電動汽車很多車型采用混動技術一樣,QTA采用了傳統方式和Metis混用的方法,一定程度上補足了AI暫時性的不足。用戶可以任意搭配傳統和AI的方式。

第二種方式是把AI和算法混合,例如厘米秀,通過維護一系列相近的圖片,使用模式匹配技術進行圖片識別和認定,還是有一定的工作量會影響到自動化測試腳本編寫者的使用體驗。

小結一下QTA Metis所應用的主要技術:
第一是由海量腳本UI邏輯數據進行的大數據;第二是AI對象識別技術,包含OCR以及圖像的分類;第三是AI目標檢測技術,實時的檢測每一個對象,並對每個對象進行分類。經過如上技術,讓UI自動化測試“看得見”。
CSIG研發工具體系
QTA是 CSIG 的研發工具體系中的一部分,負責自動化測試,CSIG 體系中還有很多有用的工具,比如做代碼掃描的CodeDog,以及致力於DevOps打通的持續集成流水線QCI等,也歡迎大家深入了解。

(CSIG 研發工具體系)
作者:林奕
騰訊 CSIG QTA 測試開發平台負責人
負責 BG 業務自動化測試落地

本文轉自:https://cloud.tencent.com/developer/article/1354843