HULK一線技術雜談 https://mp.weixin.qq.com/s/MYA6l9V4BYIZO8Jgtds6GAcss
在具體進行講解以前先介紹一下圖像識別在測試中可以想到的引用場景:html
測試過程當中,經過對待測軟件進行屏幕截圖,採用圖像識別算法識別截圖中是否包含預約義的可操做控件,若是存在,則觸發控制指令,達到了圖像識別引導測試過程的目的;java
測試結果的驗證,經過對待測軟件的界面進行截圖操做,利用圖像識別技術將截圖與指望的結果進行匹配,從而自動獲取測試結果。c++
經過圖像識別對比來進行性能測試,好比app測試中常見的響應時間的測試web
首先分享一下圖形識別在自動化測試中的應用,目前比較流行的就是sikuli, 其中關於sikuli的安裝在這裏就很少說了,官網有具體的介紹(https://launchpad.net/sikuli/+download)算法
女主宣言函數
不管是web端仍是移動端,仍有不少時候須要根據頁面內容、頁面中的圖像進行定位及斷定,這是傳統基於選擇器等手段所達不到的,今天咱們來介紹一下關於圖像識別在測試中的應用。工具
本文轉自Qtest之道,關注瞭解更多測試知識~性能
PS:豐富的一線技術、多元化的表現形式,盡在「HULK一線技術雜談」,點關注哦!
提起ui自動化你們首先想到的就是基於控件的自動化,好比常見的xpath、id、css選擇器等手段進行元素定位並進行結果判斷。可是在實際應用中,不管是web端仍是移動端,仍有不少時候須要根據頁面內容、頁面中的圖像進行定位及斷定,是這些手段所達不到的,這裏咱們來介紹一下關於圖像識別在測試中的應用。
在具體進行講解以前先介紹一下圖像識別在測試中可以想到的引用場景:
測試過程當中,經過對待測軟件進行屏幕截圖,採用圖像識別算法識別截圖中是否包含預約義的可操做控件,若是存在,則觸發控制指令,達到了圖像識別引導測試過程的目的;
測試結果的驗證,經過對待測軟件的界面進行截圖操做,利用圖像識別技術將截圖與指望的結果進行匹配,從而自動獲取測試結果。
經過圖像識別對比來進行性能測試,好比app測試中常見的響應時間的測試
首先分享一下圖形識別在自動化測試中的應用,目前比較流行的就是sikuli, 其中關於sikuli的安裝在這裏就很少說了,官網有具體的介紹(https://launchpad.net/sikuli/+download)
原理
Sikuli腳本是由jython經過圖像識別的方式來模擬鍵盤和鼠標事件,從而實現ui層面的自動化測試。Sikuli腳本的核心是一個java庫主要由兩部分組成:
java.awt.Robot 這個部分主要是講鍵盤和鼠標事件傳送給指定的位置,具體的位置是由c++引擎(基於opencv模塊)經過腳本中的目標圖片去屏幕上搜索並定位。C++引擎與java的JNI連接而且進行編譯來適應不一樣的平臺。在java的上層是一個簡單的應用層就是咱們開發腳本用的,這層給最終用戶提供了一套簡單易用的命令。
函數介紹
Find(x)
在屏幕上找到相對於的圖片,好比選定一個手機
示例代碼:
findall(x)
在屏幕上找到全部的相同圖片x,好比能夠關注多個手機(一次性把全部的圖片的座標選定,若是選定後再刷新桌面背景有可能出現以前的座標和以前的功能點對應不上,達不到測試效果)
示例代碼:
wait(x,10)
等待圖片x在屏幕上或者指定的區域中出現,超時時間10秒
示例代碼:
waitVanish(x,10)
等待屏幕上或者指定區域中給定的gui組件消失,最長等待10秒(最好設置時間)
示例代碼:
exists(x)
在屏幕上或者指定區域中查找指定的GUI組件是否存在,若找不到改組件,就返回none,不拋異常,同時能夠設置超時時間
示例代碼:
click(x)
在屏幕上或指定區域中左鍵單擊匹配度最佳的GUI組件
示例代碼:
dubleclick(x)
在屏幕上或指定區域中雙擊匹配度最佳的GUI組件
示例代碼:
rightclick()
在屏幕上或指定區域中右擊匹配度最佳的GUI組件
示例代碼:
hover(x)
將鼠標指針移動到匹配度最佳的GUI組件
示例代碼:
dragDrop(x,y)
將圖片x拖拽到圖片y上
示例代碼:
type(x,「text」)
給選定的焦點輸入內容
示例代碼:
paste(x,「text」)
給選定的焦點粘貼內容(具體和type目前沒發現具體的區別)
代碼介紹
http://www.sikuli.org/productivity.html
下面是一個用來測試響應時間的一個代碼示例
優缺點
優勢
介紹到這會有人問有了webdriver等ui自動化後爲何還要用圖像識別呢?我能想出來的理由也只有這幾點了:
一、代碼簡單易懂,簡單到什麼程度呢?能夠說會截圖就能夠進行自動化測試;
二、針對一些遊戲或者一些特殊的應用ui控件比較難以識別這樣就能夠經過圖像識別輕易的找到對應的元素;
三、代碼的學習成本比較低經常使用的函數已經封裝完畢,並且簡單易懂;
四、工具開源能夠進行二次開發;
五、能夠識別相似flash這樣不能經過識別控件來進行自動化測試的項目;
缺點
一、 屏幕不能有遮擋,由於sikuli是在當前桌面識別 對應的目標並進行操做,若是桌面有遮擋就會致使對應的元素找不到;
二、 若是代碼換一個顯示屏進行測試就要從新進行截圖,由於以前全部的截圖分辨率已經不適應當前界面;
三、 不能在後臺進行測試,必須前臺運行;
HULK一線技術雜談