您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
用Selenium和TestNG做編程式測試
作者:網(wǎng)絡轉(zhuǎn)載 發(fā)布時間:[ 2013/1/5 13:18:00 ] 推薦標簽:

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

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

這個月,我將介紹 Selenium,并逐一查看使它成為 Web 測試框架的一些特性 —— 尤其是在結合使用 TestNG、DbUnit 和 Cargo 這樣的軟件時。
驗收測試
由于 Selenium 能夠很好地模擬用戶的行為,它常常用于進行驗收測試,即在完成的系統(tǒng)上運行一整套測試。驗收測試通常需要運行整個應用程序,以使測試發(fā)揮作用。如果您要測試一個 Web 應用程序,則需要訪問應用程序數(shù)據(jù)庫,以及一臺 Web 服務器,一個容器和運行應用程序所需的任何配置元素。

使用 Selenium 進行編程式測試

在 Selenium 中,您可以使用自己喜愛的語言或者 Fit 樣式的表通過編程來編寫測試。從測試的角度來說,不管使用什么語言,測試過程和結果都不會有顯著的差別。在此,我希望研究 Selenium 的編程方法,因為在結合使用 TestNG 時,它提供了一些有趣的可行方法能性。

使用具有類似 TestNG 這樣的框架的 Selenium 進行編程式測試具有這樣一個優(yōu)點,它允許您創(chuàng)建智能 fixture,而使用 Fit 樣式的表則很難做到這一點。TestNG 尤其適合與 Selenium 結合使用,因為它使您能夠完成其他框架無法做到的測試,例如使用依賴項進行測試,重新運行失敗了的測試,以及使用單獨文件中定義的參數(shù)進行參數(shù)化測試。所有這些特性結合在一起,當然能夠使它在眾多 Web 應用程序測試框架中脫穎而出,但是,正如您將看到的,在完全自動化的驗收測試中使用這些特性令它更加出眾。

配置第一個測試

Selenium 架構實際上由兩個邏輯實體組成:您編寫的代碼以及能夠簡化與測試中的應用程序的交互的 Selenium 服務器。要成功地執(zhí)行測試,必須要啟動并運行 Selenium 服務器實例以及要測試的應用程序。(當然,測試結果取決于您編寫的應用程序是否。

幸運的是,Selenium 服務器是一種輕量級程序,可以在實際的測試范圍內(nèi)通過編程啟動和停止它。Selenium 服務器(使用 Selenium 對象嵌入)的啟動和停止由一個 fixture 來執(zhí)行。

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

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

清單 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 實例后,您可以 啟動并在運行時 停止它。這意味著您可以通過編程與 Selenium 服務器交互,并通過一個測試程序使它驅(qū)動瀏覽器。

驅(qū)動應用程序

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

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

清單 2. 簡單的 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)在可以通過使用 ID widget(輸入值)和 submit(單擊按鈕)與該 HTML 表單進行編程式交互,如清單 3 所示:

清單 3. 驅(qū)動簡單的 Web 頁面

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


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

Selenium 和 TestNG

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

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