前情介紹:
Sikuli給GUI的自動化測試提供了一種新的方式,使用截圖和圖片,而不是用API.這種方法跟人工鍵盤鼠標的輸入的測試更接近。
Sikuli包括sikul腳本,基于Jython的API以及sikuli IDE。Sikuli可以實現任何你可以在顯示器上看到ui對象的自動化,你可以通過編寫一些代碼來實現web 頁面,window/linux/Mac OS X桌面應用、甚至是iphone和android模擬器的自動化測試。我甚至看到有些游戲公司是使用Sikuli來做游戲的自動化。
Sikuli(在墨西哥維喬印第安人的語言里是”上帝之眼 ”的意思)于2009年開始在麻省理工學院用戶界面設計小組(Tsung-Hsiang Chang)和湯姆·葉(Tom Yeh)作為開源研究項目。
在2012年,兩人都在Sikuli-X-1.0rc3項目中離職,目前由另一個人RaiMan來接管開發和支持,并將其命名為SikuliX。(上帝之眼,嗯,我想了一下,大概是下圖這樣滴)
Sikuli的實現有兩種方式
- Scripting(腳本式)
- Programming(編程式)
基于簡單,實用原則,這一小節我們先簡單介紹Sikuli的Scripting方式和在robotframework中的使用。
需求:
測試Winodws自帶的記事本
設計:
引用SikuliX里面的一句話:
Using SikuliX means doing [WYSIWYS]: What You See Is What You Script
意思是:你所見即是你的腳本
實現:
1 . 安裝SikuliLibrary
先安裝SikuliLibrary(pip install robotframework-sikulilibrary或者直接下載)
準確的來說robotframework-sikulilibrary并不是robotframework官方出品的庫,是下面的這位大神自己寫的一個庫做的封裝(大愛這個開源的世界)
2 .Robotframework中導入SikuliLibrary庫,F5選中SikuliLibrary,你可以看到所有的關鍵字
3 . 測試記事本的步驟以 關鍵字的方式記錄在測試用例中:
Step1: 打開Windows的開始菜單
Step2: 打開記事本
Step3: 輸入字符'Hello world'
Step4 : 不保存關閉記事本
4 . 所見即所得的意思是需要截圖
將每一步所需的截圖放在img目錄下(要注意的是當程序運行的時候你看到是什么樣子的,你的截圖就需要是什么樣子的。比如你用的不是Win10系統,那你的啟動菜單肯定不是下面這個樣子)
此處推薦一個好用的截圖工具HyperSnap(有個小問題就是它的試用期過后有水印,會影響圖片的對比)
- 將保存圖片的相對目錄作為 參數傳給測試用例(確保截圖和測試用例在同一個項目中)
${CURDIR}\img
接下來就可以愉快的運行啦~~~
附上代碼:
*** Settings ***
Documentation Sikuli Library Demo
Test Setup Add Needed Image Path
Test Teardown Stop Remote Server
Library SikuliLibrary
*** Variables ***
${IMAGE_DIR} ${CURDIR}\\img
*** Test Cases ***
Windows Notepad Hello World
Open Windows Start Menu
Open Notepad
Input In Notepad
Quit Without Save
*** Keywords ***
Add Needed Image Path
Add Image Path ${IMAGE_DIR}
Open Windows Start Menu
Click windows_start_menu.png
Open Notepad
Input Text search_input.png notepad
Sleep 1s
Click notepad.png
Double Click notepad_title.png
Input In Notepad
Click notepad_workspace.png
Input Text ${EMPTY} Hello World
Quit Without Save
Click close.png
Click dont_save.png
需要注意的點是:
- 截圖盡量干凈,區域不能太大
- 輸入法從開始運行就切換到和輸入字符對應的輸入法,比如輸入法為中文,但是你要敲擊英文的時候會有一個回車,這種情況暫時無法處理。
- 運行時不要開啟其它的錄屏工具,可能會有一系列無法預知的錯誤。
明日立秋,四季輪換,真是不能叫一日閑過啊。