Xebium詳解06-Web自動化測試
經過那麼多準備,正式開始寫Web自動化測試吧。
Xebium腳本分為2部分,一部分為Scenario部分,其作用是把頁面操作步驟變為測試場景,具體寫法為:
| scenario | 主頁元素展示驗證 |
| do | open | on | /index.html || ensure | do | waitForElementPresent | on | //h2 || check | is | verifyText | on | //h2 | 暢銷產品 |
在頁面上就渲染為:
但是scenario並不是執行的部分(可以點擊頁面導航欄內的「Test」按鈕執行用例),作用是把步驟當作一個場景(scenario)定義出來,可以在多個地方調用該scenario,具體的測試部分是用如下腳本來實現的:
| script |
| 主頁元素展示驗證 || scenario2 ||...... |
script 表格才是真正執行的部分。當然,如果script表格中也用scenario表的執行步驟來寫也是可以的,Xebium並不限制你的寫法。但scenario和script分離的好處就是我可以在script中重複執行scenario。比如我定義了一個search控制項的搜索,包括輸入和點擊搜索控制項操作(前提是search控制項在不同頁面間都能用某種方式定位),那麼給這些步驟一個scenario名稱,那麼在不同用例的script表格部分加入這個scenario名稱,就達到了步驟復用的目的,是不是更加省力呢?
我們再深入下去,我們會看到每一個步驟的第一列都是一個關鍵詞來驅動的,那麼有多少關鍵詞達到驅動的目的呢?
| start browser | ${BROWSER} | on url | ${url} |
這句腳本用來啟動瀏覽器,${BROWSER} 是Xebium獨特的變數調用方法,用!define BROWSER {firefox}來定義即可,熟悉英文的話,這句話就變的很容易理解。瀏覽器只要按selnium的webdriver設置,可以用iexplore,chrome,opera,opera-mobile-phone等。
在源碼中,相對應的方法參數如下:
通常來說,這個命令直接放入script在測試用例的SetUp或者測試集的SuiteSetUp內寫入,啟動待測試頁,等待之後的用例執行。
| stop browser |
相對於啟動瀏覽器,關閉瀏覽器就方便多了,一般就把行直接放在測試用例的TearDown或者測試集的SuiteTearDown內寫入。
| do | open | on | / | 或者 | ensure | do | click | on | id=kw |
其實兩者都是用於執行某個selenium命令操作,區別在於do開頭的不做任何檢驗,只是要求Xebium去執行命令,ensure開頭表示做這件事後判斷是否執行完成,ensure根據返回值是否符合給定的值來判斷是否正確,這裡最後一個單元格校驗數據不給的情況下,執行成功就是pass。
那麼可執行的selenium命令有哪些呢?
"addSelection"
"altKeyDown""altKeyUp""assignId""attachFile""click"
"check""chooseCancelOnNextConfirmation""chooseOkOnNextConfirmation""close""createCookie""controlKeyDown""controlKeyUp""deleteAllVisibleCookies""deleteCookie""doubleClick"
"dragdrop""dragAndDrop""dragAndDropToObject""fireEvent""focus""goBack""highlight""keyDown""keyPress""keyUp"
"metaKeyDown""metaKeyUp""mouseOver""mouseOut""mouseDown""mouseDownAt""mouseMove""mouseMoveAt""mouseUp""mouseUpAt"
"open""openWindow""refresh""removeAllSelections""removeSelection""runScript""select""selectFrame""selectWindow""shiftKeyDown"
"shiftKeyUp""submit""type""typeKeys""uncheck""waitForFrameToLoad""waitForPageToLoad""waitForPopUp""windowFocus""windowMaximize"
.......................
還有很多命令不一一列舉了,可以說囊括了所有網頁上支持的操作命令(可以查看源碼:ExtendedSeleniumCommand.java)。
| check | is | assertTitle | test_百度搜索 |
check檢查返回值是否是true或者false,如果是true則pass;reject則相反,返回false為pass,selenium的assert基本用check/reject來判斷檢查結果。
一個完整的測試腳本如下:
點Test後可以運行,運行結果如下:
自己總結的一些測試經驗和思想:
1. 是否這樣寫太累了,有沒有更簡便的工具呢?答案是有的,很多人在寫前都會用firefox的selenium ide來錄製回放,其實只要安裝Selenium Xebium Formatter的firefox插件就可以把錄製回放結果直接轉換成Xebium格式,這樣寫起來就更得心應手了。
2. selenium測試回放時會出現很多控制項未找到的錯誤,如何解決呢?首先,我們把執行步驟的間隔時間調大,還記得之前一章提到的:
|set step delay to|slow |
這個命令,主要就是把間隔時間調大,當頁面全部載入完再去操作可以避免很多問題。另外,如果能和開發溝通,盡量有唯一不變的id或固定的xpath和properties來標識控制項,這樣也可以避免在不斷迭代期間,控制項位置的變化而導致無法識別,減少腳本修改的花費。
3. 減少自動化測試消耗的另一個原則是,盡量保持scenario的短小精悍,不要面面俱到的測試,不要把所有測試用例都自動化,不要在web設計都沒有定的情況下開始自動化,不要在沒有任何數據準備的情況下開發大量腳本,在開發期也盡量少用當某個控制項waitForElementPresent來判斷(很多時候,控制項定位就發生了變化,這個判斷會失效)。一個web自動化測試用例,用於regression測試,一般保證頁面導航、搜索、或者主流程能正常走通即可,花最少的人力物力情況下把產出最大化。
Web自動化測試介紹到這,大家心裡應該有底了,那麼如何再進一步開發自己的測試套件來擴展Xebium用途呢?我們在下一章闡述。
推薦閱讀:
※面試官:你是怎麼測試介面測試的?
※移動端測試探索之路
※Xebium詳解07-操作DB
※工具應用:Robot Framework-安裝配置與基礎使用
※從高級測試到測試開發