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後可以運行,運行結果如下:

Xebium運行結果顯示


自己總結的一些測試經驗和思想:

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-安裝配置與基礎使用
從高級測試到測試開發

TAG:自動化測試 | 軟體測試 | 軟體測試和開發 |