




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Web 應(yīng)用程序的驗(yàn)收測試常常涉及一些手工任務(wù),例如打開一個(gè)瀏覽器,并執(zhí)行一個(gè)測試用例中所描述的操作。但是手工執(zhí)行的任務(wù)容易出現(xiàn)操作人員人為的錯(cuò)誤,也比較費(fèi)時(shí)間。因此,盡可能將這些任務(wù)自動化,以消除人為因素,這是一種很好的做法。于是 Selenium 之類的測試工具就有了用武之地。Selenium 幫助您自動化驗(yàn)收測試,從而可以構(gòu)建經(jīng)過更嚴(yán)格測試、因而更為可靠也更易于維護(hù)的軟件。驗(yàn)收測試也稱黑盒測試和功能測試,是測試和檢驗(yàn)應(yīng)用程序是否能按照涉眾(stakeholder)的功能性需求、非功能性需求和其他重要需求來運(yùn)行的一種方法。驗(yàn)收測試是單元測試和組合測試的補(bǔ)充,后兩者通常是使用 xUnit 框
2、架編寫的。驗(yàn)收測試也可以使用編程語言來編寫,但是 Selenium 和其他類似的工具,例如 Fitnesse,也支持用特定于工具的文檔格式編寫測試。驗(yàn)收測試與單元測試和組合測試有以下不同之處:· 應(yīng)用程序是作為一個(gè)完整的端到端實(shí)體來測試的,而不是像單元測試和組合測試那樣,只是測試一個(gè)類或一組類。· 驗(yàn)收測試是在用戶界面(例如一個(gè)瀏覽器)上執(zhí)行的,而不是在 Web 應(yīng)用程序界面上執(zhí)行的。· 編寫測試用例的人不一定知道應(yīng)用程序的內(nèi)部結(jié)構(gòu),因此也被稱作黑盒測試。非技術(shù)性用戶也可以編寫驗(yàn)收測試。背景知識在討論 Selenium 之前,我要介紹關(guān)于以下三個(gè)話題的一些背景知識
3、,因?yàn)檫@些話題雖然不是本文的主題,但是和本文密切相關(guān):· 持續(xù)集成· Ajax· Ruby/Ruby on Rails持續(xù)集成持續(xù)集成的目標(biāo)是自動化構(gòu)建和測試過程,以便每天自動運(yùn)行一次或多次這些過程,而不是每個(gè)月手動地運(yùn)行一次。使用持續(xù)集成的最大好處是,代碼的更改會定期地自動被集成。如果系統(tǒng)受損,沒有構(gòu)建成功,Apache Continuum 和 Luntbuild 之類的持續(xù)集成工具可以自動通過發(fā)送電子郵件通知團(tuán)隊(duì)(見 參考資料)。AjaxAjax 是 Asynchronous JavaScript and XML 的縮寫,這是為相當(dāng)老的技術(shù)新創(chuàng)造的一
4、個(gè)術(shù)語。Ajax 背后的主要思想是,由于只需更新部分頁面而不是整個(gè)頁面,所以 Web 應(yīng)用程序可以更快地對用戶操作做出響應(yīng)。Ajax 將更多的復(fù)雜性引入到 Web 應(yīng)用程序中,這一點(diǎn)也反映在測試中。這是因?yàn)?Ajax 就像它的名稱所表明的那樣,使用 JavaScript 和異步 HTTP 請求來更新頁面內(nèi)容。每個(gè)瀏覽器在實(shí)現(xiàn)中與其他瀏覽器相比有一些小小的不同。Selenium 是測試和檢測這些差異的很好的工具,因?yàn)樗诖蠖鄶?shù)流行的瀏覽器中都能夠運(yùn)行。Ruby/Ruby on RailsRuby 是一種開放源碼的解釋型腳本語言,用于快捷、容易地進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)。它提供了大量的庫,而且簡單易用
5、,還具有可擴(kuò)展性和可移植性。該語言是由 Yukihiro “Matz” Matsumoto 創(chuàng)造的,目的是讓程序員將更多的注意力放在手頭的任務(wù)上,擺脫語法的煩惱。Rails 是由 David Heinemeier Hansson 創(chuàng)造的一種全棧的(full-stack)、開放源碼的 Ruby Web 框架。Rails 的目標(biāo)是使現(xiàn)實(shí)中的應(yīng)用程序編寫起來需要的代碼更少,并且比 J2EE 和 XML 之類的語言更容易。所有層都能夠無縫地一起工作,因此可以使用一種語言編寫從模板到控制流乃至業(yè)務(wù)邏輯的各種東西。Rails 使用 YAML 而不是 XML 配置文件以及注釋形式的反射和運(yùn)行時(shí)擴(kuò)展。這里不存
6、在編譯階段 程序修改后將直接運(yùn)行?;仨撌资裁词?Selenium?Selenium 是 ThoughtWorks 專門為 Web 應(yīng)用程序編寫的一個(gè)驗(yàn)收測試工具。據(jù) Selenium 主頁所說,與其他測試工具相比,使用 Selenium 的最大好處是:Selenium 測試直接在瀏覽器中運(yùn)行,就像真實(shí)用戶所做的一樣。Selenium 測試可以在 Windows、Linux 和 MacintoshAnd 上的 Internet Explorer、Mozilla 和 Firefox 中運(yùn)行。其他測試工具都不能覆蓋如此多的平臺。使用 Selenium 和在瀏覽器中運(yùn)行測試還有很多其他好處。下面是主要
7、的兩大好處:· 通過編寫模仿用戶操作的 Selenium 測試腳本,可以從終端用戶的角度來測試應(yīng)用程序。· 通過在不同瀏覽器中運(yùn)行測試,更容易發(fā)現(xiàn)瀏覽器的不兼容性。Selenium 的核心,也稱 browser bot,是用 JavaScript 編寫的。這使得測試腳本可以在受支持的瀏覽器中運(yùn)行。browser bot 負(fù)責(zé)執(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 應(yīng)用程序的交互。例如
9、,單擊一個(gè)按鈕和填寫一個(gè)表單,這些都是常見的用戶操作,可以用 Selenium 命令來自動化這些操作。· 斷言驗(yàn)證一個(gè)命令的預(yù)期結(jié)果。常見的斷言包括驗(yàn)證頁面內(nèi)容或當(dāng)前位置是否正確。在 Selenium 網(wǎng)站上可以找到可用命令的完整列表(見 參考資料)?;仨撌譙elenium 模式可以按兩種模式來使用 Selenium:test runner 和 driven。這兩種模式在復(fù)雜性和編寫方式方面有所不同。driven 測試腳本編寫起來往往要更復(fù)雜一些,因?yàn)樗鼈兪怯镁幊陶Z言編寫的。但是如果使用 Python 或 Ruby 之類的高級動態(tài)編程語言,那么這種復(fù)雜性
10、方面的差異就很小。兩種模式之間最大的不同點(diǎn)在于,如果使用 driven 腳本,測試有一部分在瀏覽器之外運(yùn)行,而如果使用 test runner 腳本的話,測試是完全在瀏覽器中運(yùn)行的。不管是 test runner 還是 driven 測試用例,都可以與持續(xù)集成工具集成?;仨撌譼est runner 模式Selenium test runner 腳本,也稱測試用例(test case),是用 HTML 語言通過一個(gè)簡單的表布局編寫的,如 清單 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 腳本通常與所測試的應(yīng)用程序(AUT)部署在同一個(gè)服務(wù)器上。這是因?yàn)?browser bot 使用 Ja
12、vaScript 來模擬用戶操作。這些腳本在一個(gè)受限制的沙箱環(huán)境中運(yùn)行。如果需要繞過這些限制,可以使用一個(gè)代理。test runner 腳本使用與 xUnit 框架相同的測試套件(test suite)和測試用例概念。測試用例和命令按照它們在測試套件和測試用例中出現(xiàn)的順序依次執(zhí)行。在 清單 1 中:· 第一列包含命令 或斷言。· 第二列包含命令或斷言的目標(biāo)(target)。這里可以用多種受支持的組件定位符中的一種來指定目標(biāo)。通常使用的是組件的 ID 或名稱,但 XPath 和 DOM 定位符也是受支持的。· 第三列包含用于為命令或斷言
13、指定參數(shù)的值。例如,當(dāng)使用 type 命令時(shí),這一列可能就是一個(gè)文本域所期望的值。即使對于非技術(shù)人員來說,test runner 腳本也易于閱讀和編寫。當(dāng)在一個(gè)瀏覽器中打開 清單 1 中的例子時(shí),將得到類似這樣的一個(gè)表:First commandTargetValueSecond commandTargetValue接下來,我將描述如何使用命令和斷言編寫一個(gè)簡單但是完整的測試用例。測試用例實(shí)例執(zhí)行 清單 2 中的測試腳本時(shí),它將執(zhí)行以下操作:1. 通過進(jìn)入 /change_address_form.html 打開變更地址頁面。2. 在
14、 ID 為 address_field 的文本框中輸入 Betelgeuse state prison。3. 單擊名為 Submit 的輸入?yún)^(qū)。注意,這里使用 XPath 找到 Submit 按鈕,這導(dǎo)致表單數(shù)據(jù)被發(fā)送到服務(wù)器。4. 驗(yàn)證頁面是否包含文本 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>測試套件要達(dá)到對應(yīng)用程序的完全測試覆蓋,通常需要不止一個(gè)測試用例。這就是 Selenium 使用測試套件的原因。測試套件用于將具有類似功能的一些測試用例編成一組,以便讓它們按順序運(yùn)行。測試套件和測試用例一樣,都是用簡單的 HTML 表編寫的。Selenium 執(zhí)行的缺省測試套件的名稱是 TestS
17、uite.html。清單 3 展示了一個(gè)測試套件,該套件像通常的用戶一樣測試應(yīng)用程序。注意,測試套件使用一個(gè)只包含一列的表,表中的每一行指向一個(gè)包含某個(gè)測試用例的文件。清單 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ū)動程序。這些腳本在瀏覽器之外的一個(gè)單獨(dú)的進(jìn)程中運(yùn)行。驅(qū)動程序的任務(wù)是執(zhí)行測試腳本,并通過與運(yùn)行在瀏覽器中的 browser bot 進(jìn)行通信來驅(qū)動瀏覽器。驅(qū)動程序與 browser bot 之間的通信使用一種簡單的特定于 Se
20、lenium 的連接語言 Selenese。driven 腳本比 test runner 腳本更強(qiáng)大、更靈活,可以將它們與 xUnit 框架集成。driven 腳本的缺點(diǎn)(與 test runner 腳本相比)是,這種腳本編寫和部署起來更復(fù)雜。這是因?yàn)轵?qū)動程序必須執(zhí)行以下任務(wù):· 啟動服務(wù)器。· 部署所測試的應(yīng)用程序(AUT)。· 部署測試腳本。· 啟動瀏覽器。· 發(fā)送命令到 browser bot。· 驗(yàn)證 browser bot 執(zhí)行的命令的結(jié)果。driven 腳本更依賴于應(yīng)用程序運(yùn)行時(shí)環(huán)境。例如,Java 驅(qū)動程序使用一個(gè)嵌入式
21、 Jetty 或 Tomcat 實(shí)例來部署所測試的應(yīng)用程序。目前,已經(jīng)有人在致力于將 Selenium 集成到 Ruby on Rails 中,但是在我撰寫本文之際,這個(gè)集成版本還沒有被發(fā)布。清單 4 摘自一個(gè)使用 Ruby 驅(qū)動程序的 driven 測試腳本。注意,我省略了用于啟動服務(wù)器和瀏覽器的步驟,這個(gè)測試腳本代碼幾乎和 test runner 腳本一樣簡單。清單 4. 使用 Ruby 驅(qū)動程序的例子 . . puts selenium.open('/logout.html') puts selenium.verify_location('/index.
22、html') . .回頁首現(xiàn)實(shí)中的需求在接下來的兩節(jié)(現(xiàn)實(shí)中的需求 和 現(xiàn)實(shí)中的用例)中,我將描述如何在現(xiàn)實(shí)場景中使用 Selenium,并針對用 Ruby on Rails 和一點(diǎn)兒 Ajax 技術(shù)編寫的一個(gè)簡單的股票報(bào)價(jià)查看器應(yīng)用程序編寫 Selenium 測試用例。雖然這個(gè)應(yīng)用程序是用 Ruby on Rails 編寫的,但是也可以將這個(gè)例子應(yīng)用于任何 Web 應(yīng)用程序,因?yàn)闇y試腳本是按 test runner 模式以 HTML 編寫的。這個(gè)示例應(yīng)用程序是用 Ruby 1.8.3 和 Ruby on Rails 0.14.2 測試的,但是它也可能可以使用更舊的
23、或更新的版本。如果有 Linux,那么發(fā)行版中通常已經(jīng)包括了 Ruby。在命令提示符下運(yùn)行 ruby -v,檢查您所擁有的版本。對于大多數(shù)平臺,都可以在/ 上找到一個(gè) Ruby 發(fā)行版。接下來的步驟是通過 RubyGems 打包系統(tǒng)安裝 Ruby on Rails。為此,只需執(zhí)行 gem install rails -include-dependencies。在某些平臺上,必須執(zhí)行一些額外的步驟,所以請?jiān)L問 Ruby on Rails 網(wǎng)站,以獲得更多細(xì)節(jié)。在我撰寫本文之際,目前可用的 Seleni
24、um 版本是 0.6。我已經(jīng)將它集成在示例應(yīng)用程序中(見 下載 小節(jié)),我的做法是從 Selenium Core 包,然后將名為 selenium 的文件夾復(fù)制到用于靜態(tài)內(nèi)容的文件夾。在 Ruby on Rails 應(yīng)用程序中,這個(gè)文件夾的名稱是 public。在 J2EE Web 應(yīng)用程序中,可以將 selenium 文件夾放在 Web 應(yīng)用程序的根目錄或 WAR 歸檔文件中。最后一步是下載示例應(yīng)用程序。從 下載 小節(jié)中獲得這個(gè)包。解壓應(yīng)用程序,并打開一個(gè)命令提示符。然后轉(zhuǎn)入應(yīng)用程序被解壓到的那個(gè)目錄。為了啟動應(yīng)用程序,運(yùn)行 ruby scr
25、ipt/server。應(yīng)該看到 Rails 成功啟動了,如 圖 1 所示。圖 1. 從命令提示符下運(yùn)行 Ruby on Rails回頁首現(xiàn)實(shí)中的用例在本節(jié)中,我將列出示例應(yīng)用程序的用例。通過這些簡化的用例,可以編寫模擬用戶所執(zhí)行步驟的驗(yàn)收測試,并驗(yàn)證這些步驟的結(jié)果是否與預(yù)期相符。股票報(bào)價(jià)應(yīng)用程序?qū)崿F(xiàn)了以下四個(gè)用例:· 登錄· 查看股票· 查看股票細(xì)節(jié)· 退出實(shí)現(xiàn)這些用例的代碼已經(jīng)編寫好了;可以在 app 目錄中找到該代碼,測試用例在 public/selenium/tests 文件夾中。登錄用例大多數(shù)人都知道登錄頁面是如何工作的 輸入
26、用戶名和密碼,然后將數(shù)據(jù)提交到服務(wù)器。如果憑證有效,就可以成功登錄,并看到受安全保護(hù)的資源。在示例應(yīng)用程序中,這個(gè)測試用例包含以下用戶操作和斷言,必須將它轉(zhuǎn)換成一個(gè) Selenium 測試用例:1. 單擊登錄鏈接。2. 驗(yàn)證系統(tǒng)是否要求用戶進(jìn)行登錄。3. 輸入用戶名。4. 輸入密碼。5. 按下登錄按鈕。6. 驗(yàn)證是否登錄成功。圖 2 展示了用于這些需求的 Selenium 測試用例。注意,我是在運(yùn)行測試之后截取屏幕快照的。綠色箭頭表示成功地通過驗(yàn)證的斷言。圖 2. 登錄和查看股票測試用例查看股票測試用例查看股票頁面顯示一個(gè)公司列表。用于這個(gè)頁面的測試用例非常簡單,所以被包括在前一個(gè)測
27、試用例的后面。該測試用例驗(yàn)證當(dāng)前位置是否為 /main/list_stocks,以及頁面是否包含文本 Click on a company name to view details。查看股票細(xì)節(jié)用例查看股票細(xì)節(jié)用例是在查看股票頁面上觸發(fā)的。用戶在一個(gè)公司名稱上單擊鼠標(biāo)時(shí),就觸發(fā)了到服務(wù)器的一個(gè) Ajax 請求。服務(wù)器的響應(yīng)包括該公司的詳細(xì)信息,這些信息將插入到當(dāng)前頁面中,而不必重新裝載完整的頁面。用于這個(gè)用例的測試用例執(zhí)行以下用戶操作:1. 單擊公司名稱 Acme Oil。2. 驗(yàn)證頁面上是否顯示該公司的詳細(xì)信息。3. 單擊公司名稱 Acme Automotive
28、。4. 驗(yàn)證頁面上是否顯示該公司的詳細(xì)信息。由于使用了 Ajax,請求是異步發(fā)生的。在一般的 Web 應(yīng)用程序中,所有東西通常都是同步的,因此這一點(diǎn)提出了一種不同的挑戰(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 右江民族醫(yī)學(xué)院《食品生物化學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 心理助手考試試題及答案
- 廣東省肇慶市本年度(2025)小學(xué)一年級數(shù)學(xué)統(tǒng)編版期末考試((上下)學(xué)期)試卷及答案
- 土壤考試試題及答案
- 京麥客服考試試題及答案
- (期末考點(diǎn)培優(yōu))專題04 用單詞適當(dāng)形式填空-2024-2025學(xué)年六年級英語下學(xué)期期末復(fù)習(xí)專項(xiàng)外研版(三起)(含答案解析)
- 會計(jì)人員考試試題及答案
- 《小學(xué)語文課程與教學(xué)論》電子教案-第十四章 語文課堂任務(wù)
- 吉林省遼源市田家炳高中友好學(xué)校七十六屆期末聯(lián)考2023-2024學(xué)年高三上學(xué)期1月期末政治 含解析
- 四川省成都市成華區(qū)某校2023-2024學(xué)年高一上學(xué)期12月月考物理 無答案
- 《集控值班員培訓(xùn)》課件
- 白酒小作坊管理制度
- 2023年北京市石景山區(qū)社區(qū)工作者招聘考試真題
- 工程部部門崗位職責(zé)
- 中國芳香植物資源
- (完整版)語文作文紙方格紙模版(兩種格式任選)
- 錄播教室裝修技術(shù)方案
- AB 753變頻器簡單操作培訓(xùn)(參數(shù)拷貝)
- JGJ59-2011建筑施工安全檢查評分表-(完整版)
- 基于文化創(chuàng)意視角的媽祖文化旅游地產(chǎn)發(fā)展研究莆田媽祖文化旅游地產(chǎn)發(fā)展條件及思路研究
- 《分子生物學(xué)》復(fù)習(xí)考試題庫(帶答案)
評論
0/150
提交評論