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