簡介
Sikuli 是一種新穎的圖形指令碼語言,或者說是一種另類的自動化測試技術。它與我們常用的自動化測試技術(工具)有很大的區別。
當你看到sikuli的指令碼時,一定會驚呼,這樣都可以~!指令碼加~~~
OK ,在驚訝過後,我們一起來大體的瞭解一下這個技術。
什麼是Sikuli?
Sikuli指令碼自動化,你在螢幕上看到的任何東西。它使用Image Recognition,識別和控制GUI組件。這是有用的,當有一個GUI的內部或原始碼的訪問是不容易的。
Sikuli(在墨西哥維喬印第安人的語言裡是”上帝之眼”的意思)是由美國麻省理工學院開發的一種最新編程技術,使得編程人員可以使用替代代碼,從而簡化代碼的編寫流程。從它研究方向上看,是一種編程技術,但是該技術還可以用於進行大規模的程式測試,指令碼程式編寫使用的是python語言。
誰正在開發的Sikuli指令碼?
Sikuli是一個開放源碼的最初的使用者介面設計組織 在麻省理工學院的研究項目 。現在是保持並進一步 協調與開源社區開發的Sikuli實驗室在美國科羅拉多州博爾德大學。這是支援的,部分由國家科學基金會獎IIS-0447800,廣達電腦的一部分的TParty項目。Sikuli 的MIT許可證下發布的 。
好吧~!你覺得Google瀏覽器翻譯的太爛(但對我這種E檔案菜鳥來說知道意思就行),那麼可以去官網看英文介紹:
http://www.sikuli.org/
Sikuli 可以採用Python 來做為指令碼語言, 當然,你如果熟悉Python 的話,相信你對sikuli 的上手非常快。當然,你也可以使用sikuli的java API 使其在java 環境下運行。
下載安裝
是否有興趣與俺一起體驗一下呢?
來下載頁面看看http://www.sikuli.org/download.html
好吧~!這貨已經發生了不小的改變,去年玩的時候還是“單純”的一下小軟體。現在好像要求變多了。
Sikuli 告訴我們目前只有32位的版本,不過這個版本應該也可以運行在32位與64的windows系統下。但是,是有前提條件地:
1、請確保你已經安裝java 6 JRE 32位版本(如果是java 7 或者是64位JRE 那是不被支援的)
2、請確定你已經卸載的先前的sikuli版本(尤其是0.10.x版本)
3、請確保在你安裝 JRE 或 卸載舊版本的sikuli 後已經重新啟動了系統。
安裝步驟:
一、就在上面提供的下載頁面,點擊“ Sikuli X-1.0rc3(R905)-win32.exe”下載安裝。程式很小,比起QTP 等工具,就可以直接忽視了。
我的安裝路徑:I:\Program Files (x86)\Sikuli X
二、 安裝完成後先不在不要運行,輸因為他還有點小毛病,我們需要在下載頁面找到“Sikuli X R930 ”串連,把這個zip類型的檔案下載下來。
三、 我們將下載的檔案sikuli-r930-win32.zip解壓,然後得到一個SIKULI-IDE 的目錄,把SIKULI-IDE目錄下的所有檔案替換Sikuli X下的所有檔案。(這種做法有點2了!)做這一步的目的是r930關聯檔案修複了了最近的bug ,所以替換r905(有問題版本)檔案關聯。希望官方進快對下載版本修複,在你看到這篇文章再去下載安裝時不用這麼麻煩了。
介面介紹
上面已經安裝完成,下面運行起來看看長相如何。
(注意視窗標題列顯示為“sikuli -r930”說明我們用的是替換版本)
功能表列與工具列非常簡單,下面介紹一下這幾個按鈕是幹嘛用的
螢幕(Take screenshot):點擊該按鈕,進入螢幕狀態,拖拽輔助線選取需要截取的介面元素,釋放滑鼠左鍵的同時,自動將該插入到編輯區中游標當前位置。使用快速鍵 Ctrl+Shift+2(Command+Shift+2)也可啟用狀態,以完成對於快顯功能表、下拉框一類的控制項的即時。該快速鍵亦可通過主菜單 File->Preferences 進行自訂。
插入圖片(Insert image):除直接外,使用者也可通過點擊該按鈕匯入已有的 PNG 格式圖片檔案。
建立螢幕地區(Create region):點擊該按鈕,進入螢幕地區選取項目狀態,拖拽定位十字線選取螢幕地區。釋放滑鼠左鍵,即可將當前選中地區的螢幕座標資訊插入到編輯區中。
運行(Run):點擊執行當前指令碼。快速鍵為 Ctrl+R(Command+R)。
慢速運行(Run in slow motion):點擊後以較慢的速度執行當前指令碼,以紅色圓形外框顯式標識每一次映像尋找定位動作,便於程式調試中進行焦點追蹤。快速鍵為 Ctrl+Alt+R(Command+Alt+R)。
左側側邊欄中分類列出了部分常用函數,點擊函數名可快速將其插入到編輯區,若該函數需作為參數,則自動轉入螢幕狀態。下方的狀態列可用於查看當前行號,與行首 Tab 縮排的層級 ( 列號 )。
右邊地區上半部分為指令碼編輯地區,我們的自測化測試指令碼就是在這個地區編寫完成。
下半部分為提示資訊,不管運行成功與失敗,都會給出相應的提示資訊。
小例子
大體上瞭解sikuli 的介面,下面來做一個自動化的小例子。(官方的第一個小例子為開始運行裡輸入hello world )這裡為開啟360極速瀏覽器(預設為百度首頁),搜尋方塊裡輸入sikuli ,然後點擊“百度一下”按鈕搜尋。
第一步、點擊案頭360極速瀏覽器表徵圖。
方法一,輸入雙擊函數doubleClick(),然後通過工具對案頭表徵圖,輸入。
方法二很快捷,點擊視窗左側雙擊函數doubleClick(),直接進入狀態。完成後直接添加函數到指令碼編輯地區。
第二步,我們依然用第二種快捷的方式,點擊左側type(表徵圖,text) 函數,這次截取的對象為百度首頁的輸入框。
因為,預設定位的焦點為圖片的中心,我們要輸入的位置在輸入框的左側,所以需要對焦點進行調整。直拉點擊的輸入框圖片。
當然,在這個視窗中,我們也可調整圖片的匹配度,匹配度越低容錯能力越強。這裡來簡單解釋一下:
大家知道ie7 與 ie8 的表徵圖雖然相似,但還是有所差別的。為了使指令碼的移植性更強。比如本機是用IE7 錄製的指令碼,移植到另一台電腦上只有IE 8 ,因為精確度調低,指令碼也會把IE8 當IE 7 來執行。當然有些情況下調低並不好,比如案頭上有兩個表徵圖非常相識,那麼精確度調整的很低,那麼指令碼就無法辨認誰是誰了。
第三步、這一步與第一步一樣,不過這裡要使用的函數是單擊函數click() ,點擊“百度一下”按鈕。
下面完整指令碼:
運行一下吧這個小指令碼吧!成就感就此而生,這是你對這種技術產生興趣的動力。。
優缺點
瞭解一下這個工具的優缺點會讓你更正確的使用這個工具
優點
1、整體上sikuli小巧、便捷、容易上手。
2、sikuli指令碼可以不經過API的編譯器直接自動化搜尋到任何你能在螢幕上看到的東西
3、對各種程式都適合
4、不存在標準控制項和非標準控制項的問題
5、相對位置概念較小,要求不高(但是對象本身尺寸有影響)
6、一次編碼,多次運行(基於java的) 7、jython和java的支援,用編程的方式比較容易擴充
缺點
1、圖片的解析度、色彩、尺寸、唯一性對程式的影響 (如果有兩個相同的,無法區分具體哪一個)
2、sikuli本身還不完善(處於開發、升級階段) 還有很多程式bug,能否繼續發展還是未知數
3、只認識當前活動的表徵圖(只有當前案頭有才行)
4、用例組織方面有提供但是目前有bug,還未調研嘗試便利性
5、的話,指令碼儲存佔用空間較大
6、相似性調整需要手動一個個的調整,工作量大
7、ljw200901t和ljw200902t的區別(不太容易區別出來,可能需要調整到similarity=1.0才行,但這樣的話可移植性就差了)
8、目前還不適合設計成一種測試架構(有用例組織功能,但是目前有bug,暫時沒有用過)
9、測試報告的產生,直接用message的話比較弱,需要用jython編程實現可能會強大一些(還未調研)
--------------------
你的鼓勵會使我進一步對sikuli進行學習,並把學習心得與大家分享!