6. Web自動(dòng)化測(cè)試

正式開(kāi)始寫Web自動(dòng)化測(cè)試吧。

Xebium腳本分為2部分,一部分為Scenario部分,其作用是把頁(yè)面操作步驟變?yōu)闇y(cè)試場(chǎng)景,具體寫法為:

| scenario | 主頁(yè)元素展示驗(yàn)證 |

| do | open | on | /index.html |

| ensure | do | waitForElementPresent | on | //h2 |

| check | is | verifyText | on | //h2 | 暢銷產(chǎn)品 |

在頁(yè)面上就渲染為:


wiki腳本的頁(yè)面展示

但是scenario并不是執(zhí)行的部分(可以點(diǎn)擊頁(yè)面導(dǎo)航欄內(nèi)的“Test”按鈕執(zhí)行用例),具體的測(cè)試部分是用如下腳本來(lái)實(shí)現(xiàn)的:

| script |

| 主頁(yè)元素展示驗(yàn)證 |

| scenario2 |

|...... |

script 表格才是真正執(zhí)行的部分。當(dāng)然,如果script表格中也用scenario表的執(zhí)行步驟來(lái)寫也是可以的,Xebium并不限制你的寫法。但scenario和script分離的好處就是我可以在script中重復(fù)執(zhí)行scenario。比如我定義了一個(gè)search控件的搜索,包括輸入和點(diǎn)擊搜索控件操作(前提是search控件在不同頁(yè)面間都能用某種方式定位),那么給這些步驟一個(gè)scenario名稱,那么在不同用例的script表格部分加入這個(gè)scenario名稱,就達(dá)到了步驟復(fù)用的目的,是不是更加省力呢?



我們?cè)偕钊胂氯?,我們?huì)看到每一個(gè)步驟的第一列都是一個(gè)關(guān)鍵詞來(lái)驅(qū)動(dòng)的,那么有多少關(guān)鍵詞達(dá)到驅(qū)動(dòng)的目的呢?

1.?| start browser | ${BROWSER} | on url | ${url} |?

這句腳本用來(lái)啟動(dòng)瀏覽器,${BROWSER} 是Xebium獨(dú)特的變量調(diào)用方法,用!define BROWSER {firefox}來(lái)定義即可,熟悉英文的話,這句話就變的很容易理解。瀏覽器只要按selnium的webdriver設(shè)置,可以用iexplore,chrome,opera,opera-mobile-phone等。

在源碼中,相對(duì)應(yīng)的方法參數(shù)如下:


啟動(dòng)瀏覽器,打開(kāi)url頁(yè)面

通常來(lái)說(shuō),這個(gè)命令直接放入script在測(cè)試用例的SetUp或者測(cè)試集的SuiteSetUp內(nèi)寫入,啟動(dòng)待測(cè)試頁(yè),等待之后的用例執(zhí)行。

2.?| stop browser |?

相對(duì)于啟動(dòng)瀏覽器,關(guān)閉瀏覽器就方便多了,一般就把行直接放在測(cè)試用例的TearDown或者測(cè)試集的SuiteTearDown內(nèi)寫入。

3.?| do | open | on | / |? 或者??| ensure | do | click | on | id=kw |

其實(shí)兩者都是用于執(zhí)行某個(gè)selenium命令操作,區(qū)別在于do開(kāi)頭的不做任何檢驗(yàn),只是要求Xebium去執(zhí)行命令,ensure開(kāi)頭表示做這件事后判斷是否執(zhí)行完成,ensure根據(jù)返回值是否符合給定的值來(lái)判斷是否正確,這里最后一個(gè)單元格校驗(yàn)數(shù)據(jù)不給的情況下,執(zhí)行成功就是pass。

那么可執(zhí)行的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"

.......................?

還有很多命令不一一列舉了,可以說(shuō)囊括了所有網(wǎng)頁(yè)上支持的操作命令(可以查看源碼:ExtendedSeleniumCommand.java)。

4.?| check | is | assertTitle | test_百度搜索 |

check檢查返回值是否是true或者false,如果是true則pass;reject則相反,返回false為pass,selenium的assert基本用check/reject來(lái)判斷檢查結(jié)果。




測(cè)試腳本如下:


測(cè)試腳本

點(diǎn)Test后可以運(yùn)行,運(yùn)行結(jié)果如下:


Xebium運(yùn)行結(jié)果



自己總結(jié)的一些測(cè)試經(jīng)驗(yàn)和思想:

1. 是否這樣寫太累了,有沒(méi)有更簡(jiǎn)便的工具呢?答案是有的,很多人在寫前都會(huì)用firefox的selenium ide來(lái)錄制回放,其實(shí)只要安裝Selenium Xebium Formatter的firefox插件就可以把錄制回放結(jié)果直接轉(zhuǎn)換成Xebium格式,這樣寫起來(lái)就更得心應(yīng)手了。

2. selenium測(cè)試回放時(shí)會(huì)出現(xiàn)很多控件未找到的錯(cuò)誤,如何解決呢?首先,我們把執(zhí)行步驟的間隔時(shí)間調(diào)大,還記得之前一章提到的

|set step delay to|slow |?

這個(gè)命令,主要就是把間隔時(shí)間調(diào)大,當(dāng)頁(yè)面全部加載完再去操作可以避免很多問(wèn)題。另外,如果能和開(kāi)發(fā)溝通,盡量有唯一不變的id或固定的xpath和properties來(lái)標(biāo)識(shí)控件,這樣也可以避免在不斷迭代期間,控件位置的變化而導(dǎo)致無(wú)法識(shí)別,減少腳本修改的花費(fèi)。

3. 減少自動(dòng)化測(cè)試消耗的另一個(gè)原則是,盡量保持scenario的短小精悍,不要面面俱到的測(cè)試,不要把所有測(cè)試用例都自動(dòng)化,不要在web設(shè)計(jì)都沒(méi)有定的情況下開(kāi)始自動(dòng)化,不要在沒(méi)有任何數(shù)據(jù)準(zhǔn)備的情況下開(kāi)發(fā)大量腳本,在開(kāi)發(fā)期也盡量少用當(dāng)某個(gè)控件waitForElementPresent來(lái)判斷(很多時(shí)候,控件定位就發(fā)生了變化,這個(gè)判斷會(huì)失效)。一個(gè)web自動(dòng)化測(cè)試用例,用于regression測(cè)試,一般保證頁(yè)面導(dǎo)航、搜索、或者主流程能正常走通即可,花最少的人力物力情況下把產(chǎn)出最大化。



Web自動(dòng)化測(cè)試介紹到這,大家心里應(yīng)該有底了,那么如何再進(jìn)一步開(kāi)發(fā)自己的測(cè)試套件來(lái)擴(kuò)展Xebium用途呢?我們?cè)谙乱徽玛U述。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容