您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源功能測(cè)試工具 > Selenium
使用 Selenium 和 TestNG 進(jìn)行編程式測(cè)試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/7 15:15:54 ] 推薦標(biāo)簽:

Selenium 是一種測(cè)試框架,它使您可在 Web 應(yīng)用程序上輕松地運(yùn)行用戶驗(yàn)收測(cè)試(user acceptance test)。本月,Andrew Glover 將向您展示如何以編程的方式運(yùn)行 Selenium 測(cè)試,并使用 TestNG 作為測(cè)試驅(qū)動(dòng)程序。在將 TestNG 靈活的測(cè)試特性(包括參數(shù)化 fixture)添加到 Selenium 固有的工具包后,您需要做的是借助 DbUnit 和 Cargo 的幫助編寫(xiě)完全自動(dòng)化、邏輯可重復(fù)的驗(yàn)收測(cè)試。

Selenium 是一種 Web 測(cè)試框架,它搭建了驗(yàn)證 Web 應(yīng)用程序的新途徑。與大多數(shù)嘗試模擬 HTTP 請(qǐng)求的 Web 測(cè)試工具不同,Selenium 執(zhí)行 Web 測(cè)試時(shí),仿佛它本身是瀏覽器。當(dāng)運(yùn)行自動(dòng)的 Selenium 測(cè)試時(shí),該框架將啟動(dòng)一個(gè)瀏覽器,并通過(guò)測(cè)試中描述的步驟實(shí)際驅(qū)動(dòng)瀏覽器,用戶將使用這種方式與應(yīng)用程序交互。

由于開(kāi)發(fā)人員和非開(kāi)發(fā)人員都能夠使用 Selenium 輕松地編寫(xiě)測(cè)試,使得它從眾多測(cè)試框架應(yīng)用程序中脫穎而出。在 Selenium 中,可以通過(guò)編程的方式編寫(xiě)測(cè)試,或者使用 Fit 樣式的表,并且編寫(xiě)了測(cè)試后,可以使測(cè)試完全自動(dòng)化。使用一個(gè) Ant 構(gòu)件(比方說(shuō))運(yùn)行完整的 Selenium 套件非常簡(jiǎn)單,并且還可以在持續(xù)集成(Continuous Integration,CI)環(huán)境中運(yùn)行 Selenium 測(cè)試。

這個(gè)月,我將介紹 Selenium,并逐一查看使它成為 Web 測(cè)試框架的一些特性 —— 尤其是在結(jié)合使用 TestNG、DbUnit 和 Cargo 這樣的軟件時(shí)。

 
驗(yàn)收測(cè)試
由于 Selenium 能夠很好地模擬用戶的行為,它常常用于進(jìn)行驗(yàn)收測(cè)試,即在完成的系統(tǒng)上運(yùn)行一整套測(cè)試。驗(yàn)收測(cè)試通常需要運(yùn)行整個(gè)應(yīng)用程序,以使測(cè)試發(fā)揮作用。如果您要測(cè)試一個(gè) Web 應(yīng)用程序,則需要訪問(wèn)應(yīng)用程序數(shù)據(jù)庫(kù),以及一臺(tái) Web 服務(wù)器,一個(gè)容器和運(yùn)行應(yīng)用程序所需的任何配置元素。

使用 Selenium 進(jìn)行編程式測(cè)試

在 Selenium 中,您可以使用自己喜愛(ài)的語(yǔ)言或者 Fit 樣式的表通過(guò)編程來(lái)編寫(xiě)測(cè)試。從測(cè)試的角度來(lái)說(shuō),不管使用什么語(yǔ)言,測(cè)試過(guò)程和結(jié)果都不會(huì)有顯著的差別。在此,我希望研究 Selenium 的編程方法,因?yàn)樵诮Y(jié)合使用 TestNG 時(shí),它提供了一些有趣的可行方法能性。

使用具有類似 TestNG 這樣的框架的 Selenium 進(jìn)行編程式測(cè)試具有這樣一個(gè)優(yōu)點(diǎn),它允許您創(chuàng)建智能 fixture,而使用 Fit 樣式的表則很難做到這一點(diǎn)。TestNG 尤其適合與 Selenium 結(jié)合使用,因?yàn)樗鼓軌蛲瓿善渌蚣軣o(wú)法做到的測(cè)試,例如使用依賴項(xiàng)進(jìn)行測(cè)試,重新運(yùn)行失敗了的測(cè)試,以及使用單獨(dú)文件中定義的參數(shù)進(jìn)行參數(shù)化測(cè)試。所有這些特性結(jié)合在一起,當(dāng)然能夠使它在眾多 Web 應(yīng)用程序測(cè)試框架中脫穎而出,但是,正如您將看到的,在完全自動(dòng)化的驗(yàn)收測(cè)試中使用這些特性令它更加出眾。

配置第一個(gè)測(cè)試

Selenium 架構(gòu)實(shí)際上由兩個(gè)邏輯實(shí)體組成:您編寫(xiě)的代碼以及能夠簡(jiǎn)化與測(cè)試中的應(yīng)用程序的交互的 Selenium 服務(wù)器。要成功地執(zhí)行測(cè)試,必須要啟動(dòng)并運(yùn)行 Selenium 服務(wù)器實(shí)例以及要測(cè)試的應(yīng)用程序。(當(dāng)然,測(cè)試結(jié)果取決于您編寫(xiě)的應(yīng)用程序是否。

幸運(yùn)的是,Selenium 服務(wù)器是一種輕量級(jí)程序,可以在實(shí)際的測(cè)試范圍內(nèi)通過(guò)編程啟動(dòng)和停止它。Selenium 服務(wù)器(使用 Selenium 對(duì)象嵌入)的啟動(dòng)和停止由一個(gè) fixture 來(lái)執(zhí)行。

要通過(guò)編程的方式啟動(dòng) Selenium 服務(wù)器,必須創(chuàng)建一個(gè)新的 Selenium 對(duì)象,并告訴它要使用哪一種兼容的瀏覽器 —— 我在下面的示例中使用的是 Firefox。您還必須提供運(yùn)行服務(wù)器實(shí)例的位置(通常是 localhost,但不是必須的),以及被測(cè)試的應(yīng)用程序使用的基 URL。

在清單 1 中,我配置了一個(gè)本地 Selenium 實(shí)例,使用它在本地安裝的 Web 應(yīng)用程序上驅(qū)動(dòng) Firefox(http://localhost:8080/gt15/)。正如您從參數(shù)中推斷的一樣,Selenium 是作為被測(cè)試的應(yīng)用程序的代理,并相應(yīng)地促進(jìn)測(cè)試。


清單 1. 配置 SeleniumServer

                Selenium driver =   new DefaultSelenium("localhost", SeleniumServer.getDefaultPort(),    "*firefox", "http://localhost:8080/gt15/");driver.start();//go to web pages and do stuff...driver.stop(); 


創(chuàng)建了 Selenium 實(shí)例后,您可以 啟動(dòng)并在運(yùn)行時(shí) 停止它。這意味著您可以通過(guò)編程與 Selenium 服務(wù)器交互,并通過(guò)一個(gè)測(cè)試程序使它驅(qū)動(dòng)瀏覽器。

驅(qū)動(dòng)應(yīng)用程序

通過(guò)編程與 Web 頁(yè)面進(jìn)行交互是一種使用本地 id 的應(yīng)用。(一些讀者可能對(duì)這種源自 本系列二月份關(guān)于 TestNG-Abbot 的文章 的概念比較熟悉)。與頁(yè)面元素進(jìn)行交互的第一步是查找該元素,通?梢允褂 HTML 元素 ID 進(jìn)行查找。Selenium 還允許您使用 XPath、正則表達(dá)式,甚至是 JavaScript 來(lái)查找特定的元素(如果您希望這樣做)。

清單 2 所示的 HTML 是使用 Groovlet 的簡(jiǎn)單 Web 應(yīng)用程序的一部分。這段代碼定義了包含輸入和提交按鈕的表單。如果希望 Selenium 與該表單交互,我必須為輸入按鈕提供 ID 以及相應(yīng)的值。我還需要為提交按鈕提供一個(gè) ID,這樣 Selenium 才能 “單擊” 它。單擊按鈕后,表單將被提交給 Groovlet —— 本例中為 FindWidget.groovy。

清單 2. 簡(jiǎn)單的 HTML 表單

                <form method=post action="./FindWidget.groovy"> <table border="0" style="border-style: dotted">  <tr>   <td  class="heading">Widget:</td>   <td class="value"><input type="text" name="widget"></td>  </tr>  <tr>   <td></td>   <td class="value"><input type="submit" value="Find Description" name="submit"></td>  </tr> </table></form> 


現(xiàn)在可以通過(guò)使用 ID widget(輸入值)和 submit(單擊按鈕)與該 HTML 表單進(jìn)行編程式交互,如清單 3 所示:

清單 3. 驅(qū)動(dòng)簡(jiǎn)單的 Web 頁(yè)面

driver.type("widget", "pg98-01");  driver.click("submit");driver.waitForPageToLoad("10000");//assert some return value... 


Selenium 中用于和 Web 頁(yè)面元素進(jìn)行交互的 API 非常的直觀。對(duì)于輸入字段,我可以使用 type() 方法將值與 ID 關(guān)聯(lián)起來(lái)。如果需要的話,可以通過(guò)編程 click 按鈕。在清單 3 中,我將 click 設(shè)置為 10 秒的等待時(shí)間 —— 足夠表單提交請(qǐng)求完成處理。當(dāng) FindWidget.groovy 中的代碼運(yùn)行其內(nèi)容并返回響應(yīng)后,我可以使用該響應(yīng)來(lái)查找特定頁(yè)面元素,并驗(yàn)證所有內(nèi)容是否正常工作。

Selenium 和 TestNG

TestNG 以其靈活性和參數(shù)化 fixture 成為定義 Selenium 的驅(qū)動(dòng)驗(yàn)收測(cè)試的。TestNG 能夠定義測(cè)試依賴項(xiàng)并返回失敗的測(cè)試,以及其易用性,使得 Selenium-TestNG 成為吸引人的組合。

讓我們首先從一個(gè)能夠允許用戶創(chuàng)建、查找、更新或刪除小部件的 Web 應(yīng)用程序開(kāi)始。創(chuàng)建一個(gè)小部件需要三個(gè)屬性:名稱、類型和定義。圖 1 顯示了創(chuàng)建小部件的表單:

上一頁(yè)123下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd