在我看來,實現UI自動化測試的過程一向都是令人快樂的事情,而維護它們就是跟噩夢一樣了,尤其是對每次CI產生的build進行BVT測試,由於開發不會告訴你任何UI的變化,那么你拿到的測試結果就勢必會一片紅了。但是對於界面相對穩定的項目,有大量回歸測試需要進行的項目,實現UI自動化的投資回報率還是很高的。
最近我實現了公司一個產品在Mac OSX上的UI自動化測試,下面就把具體的細節寫出來。
首先,選用的是由 MIT 研究團隊發布的圖形化編程技術 Sikuli,它以圖像檢索為基礎,提供了一套基於 Jython 的腳本語言以及集成開發環境,使用者可利用屏幕截圖直接引用 GUI 元素進行編程,完成交互操作。
所有的按鈕操作和拖動操作都是用Sikuli來完成的,而像窗口的相關操作,比如非全屏最大化,控制Finder定位到一個路徑等等操作都是用AppleScript實現的,因為用圖像識別去操作一些很小的或者是與周圍圖像沒有明顯區別的控件時,使用Sikuli還是不穩定的。
Sikuli不光提供了類庫,還提供了一個IDE, 當然其功能很簡單,而且經常crash,所以建議還是能不用就不用它吧。
還有就是由於Sikuli提供的是一套java包,然后再使用Jython進行包裝,讓其語言更加簡單,但是這就有可能導致你想用的python庫不能與jython兼容。
環境准備:
1. 安裝Java SDK
2. 下載Sikuli, 訪問官網下載jar包即可
3. 安裝Sikuli, 雙擊'sikulixsetup-1.1.0.jar', 勾選1, 2即可 (Sikuli的安裝界面,左右一個開源項目來說,已經是很出色了)
4. 安裝過后,會生成一個app文件,建議將其拖到Application中吧:
5. 最后執行SikuliX.app即可
到此,安裝就結束了,打開即可開到Sikuli的IDE了:
可以使用它方便進行截圖和調整圖片的匹配度。
6. 由於使用的是圖像識別,所以最好在開發和運行階段都將OSX的透明度關掉,以免干擾圖像識別的准確度。
在System Preferences中關掉透明:
7. 將需要用到的app加入到“Security & Privacy”的“Accessibility”中:
到此,環境准備的差不多了,當然如果需要用到python的相關模塊, 可以安裝get-pip.py,之后執行install命令了:
sudo pip install [module name]