




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Web 應用程序的驗收測試常常涉及一些手工任務,例如打開一個瀏覽器,并執(zhí)行一個測試用例中所描述的操作。但是手工執(zhí)行的任務容易出現(xiàn)操作人員人為的錯誤,也比較費時間。因此,盡可能將這些任務自動化,以消除人為因素,這是一種很好的做法。于是 Selenium 之類的測試工具就有了用武之地。Selenium 幫助您自動化驗收測試,從而可以構(gòu)建經(jīng)過更嚴格測試、因而更為可靠也更易于維護的軟件。驗收測試也稱黑盒測試和功能測試,是測試和檢驗應用程序是否能按照涉眾(stakeholder)的功能性需求、非功能性需求和其他重要需求來運行的一種方法。驗收測試是單元測試和組合測試的補充,后兩者通常是使用 xUnit 框
2、架編寫的。驗收測試也可以使用編程語言來編寫,但是 Selenium 和其他類似的工具,例如 Fitnesse,也支持用特定于工具的文檔格式編寫測試。驗收測試與單元測試和組合測試有以下不同之處:· 應用程序是作為一個完整的端到端實體來測試的,而不是像單元測試和組合測試那樣,只是測試一個類或一組類。· 驗收測試是在用戶界面(例如一個瀏覽器)上執(zhí)行的,而不是在 Web 應用程序界面上執(zhí)行的。· 編寫測試用例的人不一定知道應用程序的內(nèi)部結(jié)構(gòu),因此也被稱作黑盒測試。非技術(shù)性用戶也可以編寫驗收測試。背景知識在討論 Selenium 之前,我要介紹關(guān)于以下三個話題的一些背景知識
3、,因為這些話題雖然不是本文的主題,但是和本文密切相關(guān):· 持續(xù)集成· Ajax· Ruby/Ruby on Rails持續(xù)集成持續(xù)集成的目標是自動化構(gòu)建和測試過程,以便每天自動運行一次或多次這些過程,而不是每個月手動地運行一次。使用持續(xù)集成的最大好處是,代碼的更改會定期地自動被集成。如果系統(tǒng)受損,沒有構(gòu)建成功,Apache Continuum 和 Luntbuild 之類的持續(xù)集成工具可以自動通過發(fā)送電子郵件通知團隊(見 參考資料)。AjaxAjax 是 Asynchronous JavaScript and XML 的縮寫,這是為相當老的技術(shù)新創(chuàng)造的一
4、個術(shù)語。Ajax 背后的主要思想是,由于只需更新部分頁面而不是整個頁面,所以 Web 應用程序可以更快地對用戶操作做出響應。Ajax 將更多的復雜性引入到 Web 應用程序中,這一點也反映在測試中。這是因為 Ajax 就像它的名稱所表明的那樣,使用 JavaScript 和異步 HTTP 請求來更新頁面內(nèi)容。每個瀏覽器在實現(xiàn)中與其他瀏覽器相比有一些小小的不同。Selenium 是測試和檢測這些差異的很好的工具,因為它在大多數(shù)流行的瀏覽器中都能夠運行。Ruby/Ruby on RailsRuby 是一種開放源碼的解釋型腳本語言,用于快捷、容易地進行面向?qū)ο蟪绦蛟O(shè)計。它提供了大量的庫,而且簡單易用
5、,還具有可擴展性和可移植性。該語言是由 Yukihiro “Matz” Matsumoto 創(chuàng)造的,目的是讓程序員將更多的注意力放在手頭的任務上,擺脫語法的煩惱。Rails 是由 David Heinemeier Hansson 創(chuàng)造的一種全棧的(full-stack)、開放源碼的 Ruby Web 框架。Rails 的目標是使現(xiàn)實中的應用程序編寫起來需要的代碼更少,并且比 J2EE 和 XML 之類的語言更容易。所有層都能夠無縫地一起工作,因此可以使用一種語言編寫從模板到控制流乃至業(yè)務邏輯的各種東西。Rails 使用 YAML 而不是 XML 配置文件以及注釋形式的反射和運行時擴展。這里不存
6、在編譯階段 程序修改后將直接運行?;仨撌资裁词?Selenium?Selenium 是 ThoughtWorks 專門為 Web 應用程序編寫的一個驗收測試工具。據(jù) Selenium 主頁所說,與其他測試工具相比,使用 Selenium 的最大好處是:Selenium 測試直接在瀏覽器中運行,就像真實用戶所做的一樣。Selenium 測試可以在 Windows、Linux 和 MacintoshAnd 上的 Internet Explorer、Mozilla 和 Firefox 中運行。其他測試工具都不能覆蓋如此多的平臺。使用 Selenium 和在瀏覽器中運行測試還有很多其他好處。下面是主要
7、的兩大好處:· 通過編寫模仿用戶操作的 Selenium 測試腳本,可以從終端用戶的角度來測試應用程序。· 通過在不同瀏覽器中運行測試,更容易發(fā)現(xiàn)瀏覽器的不兼容性。Selenium 的核心,也稱 browser bot,是用 JavaScript 編寫的。這使得測試腳本可以在受支持的瀏覽器中運行。browser bot 負責執(zhí)行從測試腳本接收到的命令,測試腳本要么是用 HTML 的表布局編寫的,要么是使用一種受支持的編程語言編寫的。Selenium 適用于以下瀏覽器: Internet ExplorerMozillaFirefoxSafari
8、Windows XP6.01.6+, 1.7+0.8+, 0.9+, 1.0 Red Hat Linux 1.6+, 1.7+0.8+, 0.9+, 1.0+ Mac OS X 10.3不支持1.6+, 1.7+0.8+, 0.9+, 1.0+1.3+回頁首Selenium 命令通過 Selenium 命令,腳本編寫者可以描述 browser bot 在瀏覽器中所執(zhí)行的操作??梢詫⑦@些命令分成兩類 操作(action) 和斷言(assertion):· 操作模擬用戶與 Web 應用程序的交互。例如
9、,單擊一個按鈕和填寫一個表單,這些都是常見的用戶操作,可以用 Selenium 命令來自動化這些操作。· 斷言驗證一個命令的預期結(jié)果。常見的斷言包括驗證頁面內(nèi)容或當前位置是否正確。在 Selenium 網(wǎng)站上可以找到可用命令的完整列表(見 參考資料)?;仨撌譙elenium 模式可以按兩種模式來使用 Selenium:test runner 和 driven。這兩種模式在復雜性和編寫方式方面有所不同。driven 測試腳本編寫起來往往要更復雜一些,因為它們是用編程語言編寫的。但是如果使用 Python 或 Ruby 之類的高級動態(tài)編程語言,那么這種復雜性
10、方面的差異就很小。兩種模式之間最大的不同點在于,如果使用 driven 腳本,測試有一部分在瀏覽器之外運行,而如果使用 test runner 腳本的話,測試是完全在瀏覽器中運行的。不管是 test runner 還是 driven 測試用例,都可以與持續(xù)集成工具集成?;仨撌譼est runner 模式Selenium test runner 腳本,也稱測試用例(test case),是用 HTML 語言通過一個簡單的表布局編寫的,如 清單 1 所示。清單 1. Selenium 測試用例的結(jié)構(gòu) <table border="1"> <
11、tr> <td>First command</td> <td>Target</td> <td>Value</td> </tr> <tr> <td>Second command</td> <td>Target</td> <td>Value</td> </tr> </table>test runner 腳本通常與所測試的應用程序(AUT)部署在同一個服務器上。這是因為 browser bot 使用 Ja
12、vaScript 來模擬用戶操作。這些腳本在一個受限制的沙箱環(huán)境中運行。如果需要繞過這些限制,可以使用一個代理。test runner 腳本使用與 xUnit 框架相同的測試套件(test suite)和測試用例概念。測試用例和命令按照它們在測試套件和測試用例中出現(xiàn)的順序依次執(zhí)行。在 清單 1 中:· 第一列包含命令 或斷言。· 第二列包含命令或斷言的目標(target)。這里可以用多種受支持的組件定位符中的一種來指定目標。通常使用的是組件的 ID 或名稱,但 XPath 和 DOM 定位符也是受支持的。· 第三列包含用于為命令或斷言
13、指定參數(shù)的值。例如,當使用 type 命令時,這一列可能就是一個文本域所期望的值。即使對于非技術(shù)人員來說,test runner 腳本也易于閱讀和編寫。當在一個瀏覽器中打開 清單 1 中的例子時,將得到類似這樣的一個表:First commandTargetValueSecond commandTargetValue接下來,我將描述如何使用命令和斷言編寫一個簡單但是完整的測試用例。測試用例實例執(zhí)行 清單 2 中的測試腳本時,它將執(zhí)行以下操作:1. 通過進入 /change_address_form.html 打開變更地址頁面。2. 在
14、 ID 為 address_field 的文本框中輸入 Betelgeuse state prison。3. 單擊名為 Submit 的輸入?yún)^(qū)。注意,這里使用 XPath 找到 Submit 按鈕,這導致表單數(shù)據(jù)被發(fā)送到服務器。4. 驗證頁面是否包含文本 Address change successful。清單 2. 在測試用例中使用命令和斷言的例子 <table> <tr> <td>open</td> <td>/change_address_form.h
15、tml</td> <td></td> </tr> <tr> <td>type</td> <td>address_field</td> <td>Betelgeuse state prison</td> </tr> <tr> <td>clickAndWait</td> <td>/inputname='Submit'</td> <td></td> </t
16、r> <tr> <td>verifyTextPresent</td> <td>Address change successful</td> <td></td> </tr> </table>測試套件要達到對應用程序的完全測試覆蓋,通常需要不止一個測試用例。這就是 Selenium 使用測試套件的原因。測試套件用于將具有類似功能的一些測試用例編成一組,以便讓它們按順序運行。測試套件和測試用例一樣,都是用簡單的 HTML 表編寫的。Selenium 執(zhí)行的缺省測試套件的名稱是 TestS
17、uite.html。清單 3 展示了一個測試套件,該套件像通常的用戶一樣測試應用程序。注意,測試套件使用一個只包含一列的表,表中的每一行指向一個包含某個測試用例的文件。清單 3. 測試套件示例 <table> <tr> <td>Test suite for the whole application</td> </tr> <tr> <td><a href="test_main_page.html">Access main page</a></td>
18、; </tr> <tr> <td><a href="test_login.html">Login to application</a></td> </tr> <tr> <td><a href="test_address_change.html">Change address</a></td> </tr> <tr> <td><a href="test_logout
19、.html">Logout from application</a></td> </tr> </table>接下來我將把目光轉(zhuǎn)移到 driven 測試腳本?;仨撌譫riven 模式driven Selenium 腳本是用多種受支持的編程語言中的一種編寫的 目前可用的有 Java、Ruby 和 Python 驅(qū)動程序。這些腳本在瀏覽器之外的一個單獨的進程中運行。驅(qū)動程序的任務是執(zhí)行測試腳本,并通過與運行在瀏覽器中的 browser bot 進行通信來驅(qū)動瀏覽器。驅(qū)動程序與 browser bot 之間的通信使用一種簡單的特定于 Se
20、lenium 的連接語言 Selenese。driven 腳本比 test runner 腳本更強大、更靈活,可以將它們與 xUnit 框架集成。driven 腳本的缺點(與 test runner 腳本相比)是,這種腳本編寫和部署起來更復雜。這是因為驅(qū)動程序必須執(zhí)行以下任務:· 啟動服務器。· 部署所測試的應用程序(AUT)。· 部署測試腳本。· 啟動瀏覽器。· 發(fā)送命令到 browser bot。· 驗證 browser bot 執(zhí)行的命令的結(jié)果。driven 腳本更依賴于應用程序運行時環(huán)境。例如,Java 驅(qū)動程序使用一個嵌入式
21、 Jetty 或 Tomcat 實例來部署所測試的應用程序。目前,已經(jīng)有人在致力于將 Selenium 集成到 Ruby on Rails 中,但是在我撰寫本文之際,這個集成版本還沒有被發(fā)布。清單 4 摘自一個使用 Ruby 驅(qū)動程序的 driven 測試腳本。注意,我省略了用于啟動服務器和瀏覽器的步驟,這個測試腳本代碼幾乎和 test runner 腳本一樣簡單。清單 4. 使用 Ruby 驅(qū)動程序的例子 . . puts selenium.open('/logout.html') puts selenium.verify_location('/index.
22、html') . .回頁首現(xiàn)實中的需求在接下來的兩節(jié)(現(xiàn)實中的需求 和 現(xiàn)實中的用例)中,我將描述如何在現(xiàn)實場景中使用 Selenium,并針對用 Ruby on Rails 和一點兒 Ajax 技術(shù)編寫的一個簡單的股票報價查看器應用程序編寫 Selenium 測試用例。雖然這個應用程序是用 Ruby on Rails 編寫的,但是也可以將這個例子應用于任何 Web 應用程序,因為測試腳本是按 test runner 模式以 HTML 編寫的。這個示例應用程序是用 Ruby 1.8.3 和 Ruby on Rails 0.14.2 測試的,但是它也可能可以使用更舊的
23、或更新的版本。如果有 Linux,那么發(fā)行版中通常已經(jīng)包括了 Ruby。在命令提示符下運行 ruby -v,檢查您所擁有的版本。對于大多數(shù)平臺,都可以在/ 上找到一個 Ruby 發(fā)行版。接下來的步驟是通過 RubyGems 打包系統(tǒng)安裝 Ruby on Rails。為此,只需執(zhí)行 gem install rails -include-dependencies。在某些平臺上,必須執(zhí)行一些額外的步驟,所以請訪問 Ruby on Rails 網(wǎng)站,以獲得更多細節(jié)。在我撰寫本文之際,目前可用的 Seleni
24、um 版本是 0.6。我已經(jīng)將它集成在示例應用程序中(見 下載 小節(jié)),我的做法是從 Selenium Core 包,然后將名為 selenium 的文件夾復制到用于靜態(tài)內(nèi)容的文件夾。在 Ruby on Rails 應用程序中,這個文件夾的名稱是 public。在 J2EE Web 應用程序中,可以將 selenium 文件夾放在 Web 應用程序的根目錄或 WAR 歸檔文件中。最后一步是下載示例應用程序。從 下載 小節(jié)中獲得這個包。解壓應用程序,并打開一個命令提示符。然后轉(zhuǎn)入應用程序被解壓到的那個目錄。為了啟動應用程序,運行 ruby scr
25、ipt/server。應該看到 Rails 成功啟動了,如 圖 1 所示。圖 1. 從命令提示符下運行 Ruby on Rails回頁首現(xiàn)實中的用例在本節(jié)中,我將列出示例應用程序的用例。通過這些簡化的用例,可以編寫模擬用戶所執(zhí)行步驟的驗收測試,并驗證這些步驟的結(jié)果是否與預期相符。股票報價應用程序?qū)崿F(xiàn)了以下四個用例:· 登錄· 查看股票· 查看股票細節(jié)· 退出實現(xiàn)這些用例的代碼已經(jīng)編寫好了;可以在 app 目錄中找到該代碼,測試用例在 public/selenium/tests 文件夾中。登錄用例大多數(shù)人都知道登錄頁面是如何工作的 輸入
26、用戶名和密碼,然后將數(shù)據(jù)提交到服務器。如果憑證有效,就可以成功登錄,并看到受安全保護的資源。在示例應用程序中,這個測試用例包含以下用戶操作和斷言,必須將它轉(zhuǎn)換成一個 Selenium 測試用例:1. 單擊登錄鏈接。2. 驗證系統(tǒng)是否要求用戶進行登錄。3. 輸入用戶名。4. 輸入密碼。5. 按下登錄按鈕。6. 驗證是否登錄成功。圖 2 展示了用于這些需求的 Selenium 測試用例。注意,我是在運行測試之后截取屏幕快照的。綠色箭頭表示成功地通過驗證的斷言。圖 2. 登錄和查看股票測試用例查看股票測試用例查看股票頁面顯示一個公司列表。用于這個頁面的測試用例非常簡單,所以被包括在前一個測
27、試用例的后面。該測試用例驗證當前位置是否為 /main/list_stocks,以及頁面是否包含文本 Click on a company name to view details。查看股票細節(jié)用例查看股票細節(jié)用例是在查看股票頁面上觸發(fā)的。用戶在一個公司名稱上單擊鼠標時,就觸發(fā)了到服務器的一個 Ajax 請求。服務器的響應包括該公司的詳細信息,這些信息將插入到當前頁面中,而不必重新裝載完整的頁面。用于這個用例的測試用例執(zhí)行以下用戶操作:1. 單擊公司名稱 Acme Oil。2. 驗證頁面上是否顯示該公司的詳細信息。3. 單擊公司名稱 Acme Automotive
28、。4. 驗證頁面上是否顯示該公司的詳細信息。由于使用了 Ajax,請求是異步發(fā)生的。在一般的 Web 應用程序中,所有東西通常都是同步的,因此這一點提出了一種不同的挑戰(zhàn)??梢韵駵y試其他功能一樣來測試 Ajax 功能。惟一的不同是,必須讓 Selenium 暫停,等待 Ajax 命令完成。為此,可以使用 pause 命令來等待 Ajax 命令的完成。另外,Joseph Moore 在他最近的 blog 貼中提到,還可以使用 waitForValue 和 waitForCondition 命令代替 pause 命令(見 參考資料)。圖 3 展示了被轉(zhuǎn)換成 Se
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 風力發(fā)電機安裝與運行(風電機組課件)
- 發(fā)電廠熱力系統(tǒng)-發(fā)電廠輔助熱力系統(tǒng)(熱力發(fā)電廠課件)
- 各高校輔導員招聘考試緊抓重點及試題及答案
- 高校輔導員招聘考試專業(yè)知識及試題及答案
- 大學輔導員心理輔導案例分析試題及答案
- 探索農(nóng)業(yè)職業(yè)經(jīng)理人考試中的創(chuàng)新試題及答案
- 花藝師實踐操作流程的試題及答案
- 2024年農(nóng)藝師考試實務考核試題及答案
- 考生交流促進福建事業(yè)單位考試復習試題及答案
- 靜脈輸液證考試題及答案
- (正式版)JBT 14449-2024 起重機械焊接工藝評定
- 2024年中國人保招聘筆試參考題庫附帶答案詳解
- 2024年共青團入團考試題目及答案
- 提高旅游導游服務技能的培訓課程
- 展廳維保方案
- 酒店貸款報告
- 小學三年級下冊信息技術(shù)全冊教案
- 鐵路機車電工
- 班組長如何搞好班組安全建設(shè)
- 職高、中職、衛(wèi)校、技術(shù)學校班主任能力大賽(班級建設(shè)方案2023年)
- 單位降薪通知范本
評論
0/150
提交評論