圖 1. 從命令提示符下運(yùn)行 Ruby on Rails
現(xiàn)實(shí)中的用例
在本節(jié)中,我將列出示例應(yīng)用程序的用例。通過(guò)這些簡(jiǎn)化的用例,可以編寫(xiě)模擬用戶所執(zhí)行步驟的驗(yàn)收測(cè)試,并驗(yàn)證這些步驟的結(jié)果是否與預(yù)期相符。股票報(bào)價(jià)應(yīng)用程序?qū)崿F(xiàn)了以下四個(gè)用例:
* 登錄
* 查看股票
* 查看股票細(xì)節(jié)
* 退出
實(shí)現(xiàn)這些用例的代碼已經(jīng)編寫(xiě)好了;可以在 app 目錄中找到該代碼,測(cè)試用例在 public/selenium/tests 文件夾中。
登錄用例
大多數(shù)人都知道登錄頁(yè)面是如何工作的 —— 輸入用戶名和密碼,然后將數(shù)據(jù)提交到服務(wù)器。如果憑證有效,可以成功登錄,并看到受安全保護(hù)的資源。在示例應(yīng)用程序中,這個(gè)測(cè)試用例包含以下用戶操作和斷言,必須將它轉(zhuǎn)換成一個(gè) Selenium 測(cè)試用例:
1. 單擊登錄鏈接。
2. 驗(yàn)證系統(tǒng)是否要求用戶進(jìn)行登錄。
3. 輸入用戶名。
4. 輸入密碼。
5. 按下登錄按鈕。
6. 驗(yàn)證是否登錄成功。
圖 2 展示了用于這些需求的 Selenium 測(cè)試用例。注意,我是在運(yùn)行測(cè)試之后截取屏幕快照的。綠色箭頭表示成功地通過(guò)驗(yàn)證的斷言。
圖 2. 登錄和查看股票測(cè)試用例
查看股票測(cè)試用例
查看股票頁(yè)面顯示一個(gè)公司列表。用于這個(gè)頁(yè)面的測(cè)試用例非常簡(jiǎn)單,所以被包括在前一個(gè)測(cè)試用例的后面。該測(cè)試用例驗(yàn)證當(dāng)前位置是否為 /main/list_stocks,以及頁(yè)面是否包含文本 Click on a company name to view details。
查看股票細(xì)節(jié)用例
查看股票細(xì)節(jié)用例是在查看股票頁(yè)面上觸發(fā)的。用戶在一個(gè)公司名稱上單擊鼠標(biāo)時(shí),觸發(fā)了到服務(wù)器的一個(gè) Ajax 請(qǐng)求。服務(wù)器的響應(yīng)包括該公司的詳細(xì)信息,這些信息將插入到當(dāng)前頁(yè)面中,而不必重新裝載完整的頁(yè)面。用于這個(gè)用例的測(cè)試用例執(zhí)行以下用戶操作:
1. 單擊公司名稱 Acme Oil。
2. 驗(yàn)證頁(yè)面上是否顯示該公司的詳細(xì)信息。
3. 單擊公司名稱 Acme Automotive。
4. 驗(yàn)證頁(yè)面上是否顯示該公司的詳細(xì)信息。
由于使用了 Ajax,請(qǐng)求是異步發(fā)生的。在一般的 Web 應(yīng)用程序中,所有東西通常都是同步的,因此這一點(diǎn)提出了一種不同的挑戰(zhàn)?梢韵駵y(cè)試其他功能一樣來(lái)測(cè)試 Ajax 功能。惟一的不同是,必須讓 Selenium 暫停,等待 Ajax 命令完成。為此,可以使用 pause 命令來(lái)等待 Ajax 命令的完成。另外,Joseph Moore 在他近的 blog 貼中提到,還可以使用 waitForValue 和 waitForCondition 命令代替 pause 命令(見(jiàn) 參考資料)。
圖 3 展示了被轉(zhuǎn)換成 Selenium 用例的需求。
圖 3. 查看股票細(xì)節(jié)測(cè)試用例
注意 pause 命令:必須使用這些命令,以便等待異步請(qǐng)求完成和更新頁(yè)面內(nèi)容。如果沒(méi)有 500 毫秒的暫停,測(cè)試將失。ㄈ 圖 4 所示)。
圖 4. 失敗的查看股票細(xì)節(jié)測(cè)試用例
pause 命令還測(cè)試 Ajax 功能的非功能性需求。500 毫秒對(duì)于 pause 命令是一個(gè)很好的值,因?yàn)?Ajax 請(qǐng)求應(yīng)該快速地執(zhí)行和完成?梢栽囍サ pause 命令,看看結(jié)果如何。如果測(cè)試在您的機(jī)器上失敗,那么試著將這個(gè)值增加到 1000 毫秒。
退出用例
退出用例很容易實(shí)現(xiàn),簡(jiǎn)單來(lái)說(shuō)只有以下兩步:
1. 單擊退出鏈接。
2. 驗(yàn)證是否成功退出。
圖 5 展示了后這個(gè)測(cè)試用例。
圖 5. 退出用例
所有測(cè)試都被添加到 圖 6 左側(cè)顯示的缺省測(cè)試套件中。
圖 6. 示例應(yīng)用程序的測(cè)試套件
執(zhí)行測(cè)試套件
后要做的是在 Mozilla Firefox 和 Microsoft Internet Explorer 中執(zhí)行測(cè)試套件。為此,在瀏覽器中打開(kāi) http://localhost:3000/selenium/TestRunner.html,然后單擊 圖 6 中所示的 All 按鈕。失敗的測(cè)試用例和斷言將被標(biāo)記為紅色,但是這里,在兩個(gè)瀏覽器中所有用例都應(yīng)該可以成功完成(同樣見(jiàn) 圖 6)。注意,我使用的是 Mozilla Firefox 1.0.7 和 Internet Explorer 6.0。
還可以單步調(diào)試測(cè)試套件,這意味著 Selenium 將很慢地執(zhí)行測(cè)試套件,這樣當(dāng)測(cè)試套件在瀏覽器中執(zhí)行時(shí),可以看到它的每一步。
結(jié)束語(yǔ)
Selenium 是軟件工程師、設(shè)計(jì)人員和測(cè)試人員的工具箱中又一個(gè)有用且重要的工具。通過(guò)將該工具與持續(xù)集成工具相結(jié)合,團(tuán)隊(duì)可以將驗(yàn)收測(cè)試自動(dòng)化,并構(gòu)建更好的軟件,因?yàn)樗麄兛梢愿菀住⒏、更頻繁地發(fā)現(xiàn) bug。Selenium 的另一個(gè)優(yōu)點(diǎn)是可以節(jié)省時(shí)間,使開(kāi)發(fā)人員和測(cè)試人員不必將時(shí)間花在本可以(也應(yīng)該)自動(dòng)化的手工任務(wù)上,從而讓團(tuán)隊(duì)將精力放在更有價(jià)值的活動(dòng)上。