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

圖 1. 創(chuàng)建小部件的 Web 表單

請注意:表單元素的類型是具有三個不同選項的下拉列表,如圖 2 所示:


圖 2. 包含下拉列表的 Web 表單

單擊 Create Widget 將促使 Groovlet 處理這一請求。如果所有內(nèi)容正確的話(即名字和定義不為空,并且數(shù)據(jù)庫中不存在該實例),Groovlet 將創(chuàng)建一個新的小部件實例并類似圖 3 所示的狀態(tài)頁面:

圖 3. 返回的 Web 頁面顯示狀態(tài)

結(jié)合使用 Selenium 和 TestNG 驗證簡單的 Create Widget 用例是一種可管理的應(yīng)用:

    配置并啟動 Selenium 服務(wù)器的實例。
    與 Create Widget Web 表單交互并提交它。
    檢驗結(jié)果頁面是否包含具有小部件名稱的成功信息。
    停止 Selenium 服務(wù)器實例。

請注意:用例中的每一步都是通過 Selenium 完成的 —— 所以說,TestNG 僅僅幫助進行查找。現(xiàn)在,我們來實踐一下。

Create Widget 測試用例

我希望對 Selenium 服務(wù)器進行靈活的配置,所以我將編寫一個參數(shù)化 fixture(TestNG-Selenium 樣式),一般可以使用它來為不同瀏覽器、不同位置甚至混合的 Web 應(yīng)用程序地址(類似 localhost 和產(chǎn)品)創(chuàng)建 Selenium 服務(wù)器。清單 4 定義了我所配置的靈活的 Selenium 服務(wù)器 fixture:

清單 4. 靈活的 Selenium fixture

                 @Parameters({"selen-svr-addr","brwsr-path","aut-addr"}) @BeforeClass private void init(String selenSrvrAddr, String bpath,    String appPath) throws Exception {  driver = new DefaultSelenium(selenSrvrAddr,     SeleniumServer.getDefaultPort(), bpath, appPath);  driver.start(); } //.... @AfterClass private void stop() throws Exception {  driver.stop(); } 


必須將參數(shù)名與 TestNG 的 testng.xml 文件中的值鏈接起來;因此,我定義了如清單 5 所示的三個參數(shù)。(默認情況下為 Firefox 定義了 brwsr-path 參數(shù),但是我可以同樣輕松地定義一組新的使用 Internet Explorer 的測試。)

清單 5. TestNG testng.xml 文件中的參數(shù)值

                 <parameter name="selen-svr-addr" value="localhost"/>  <parameter name="aut-addr" value="http://localhost:8080/gt15/"/>  <parameter name="brwsr-path" value="*firefox"/> 


接下來,我將定義清單 6 所示的測試用例,它也包含一個參數(shù),用于進行測試的應(yīng)用程序的基 URL。該測試將促使瀏覽器在 Web 應(yīng)用程序內(nèi)打開特定頁面,并操作 圖 1 所示的表單。

清單 6. 一個良好的測試用例

                 @Parameters({"aut-addr"}) @Test public void verifyCreate(String appPath) throws Exception {  driver.open(appPath + "/CreateWidget.html");  driver.type("widget", "book-01");  driver.select("type", "book");  driver.type("definition", "book widget type book");  driver.click("submit");  driver.waitForPageToLoad("10000");    assertEquals(driver.getText("success"),     "The widget book-01 was successfully created.",     "test didn't return expected message"); } 


通過調(diào)用 driver.click("submit") 提交表單后,Selenium 將等待響應(yīng)的加載,然后我將斷言成功的創(chuàng)建信息。(注意:響應(yīng) Web 頁面具有一個 ID 為 success 的元素。)

結(jié)果產(chǎn)生一個靈活的文本類,它將檢驗兩種場景:一種是良好的場景,而另一種是沒有提供定義的邊界用例,如清單 7 所示:


清單 7. 使用 TestNG 進行全部的處理

                public class CreateWidgetUATest { private Selenium driver; @Parameters({"selen-svr-addr","brwsr-path","aut-addr"}) @BeforeClass private void init(String selenSrvrAddr, String bpath,    String appPath) throws Exception {  driver = new DefaultSelenium(selenSrvrAddr,     SeleniumServer.getDefaultPort(), bpath, appPath);  driver.start(); } @Parameters({"aut-addr"}) @Test public void verifyCreate(String appPath) throws Exception {  driver.open(appPath + "/CreateWidget.html");  driver.type("widget", "book-01");  driver.select("type", "book");  driver.type("definition", "book widget type book");  driver.click("submit");  driver.waitForPageToLoad("10000");    assertEquals(driver.getText("success"),     "The widget book-01 was successfully created.",     "test didn't return expected message"); } @Parameters({"aut-addr"}) @Test public void verifyCreationError(String appPath) throws Exception {  driver.open(appPath + "/CreateWidget.html");  driver.type("widget", "book-02");  driver.select("type", "book");  //definition explicitly set to blank  driver.type("definition", "");  driver.click("submit");  driver.waitForPageToLoad("10000");    assertEquals(driver.getText("failure"),     "There was an error in creating the widget.",     "test didn't return expected message"); } @AfterClass private void stop() throws Exception {  driver.stop(); }} 


目前為止,我已經(jīng)定義了兩種足夠靈活的 Selenium 測試,可以對多個瀏覽器進行測試,并且還可以對多個位置進行測試,這對初學(xué)者非常有利。盡管如此,我還想獲得更高級點的應(yīng)用,我開始考慮測試中的邏輯是否可重復(fù)使用。比如,如果對一行運行兩次 CreateWidgetUATest 測試類會怎樣?如何確保我的 Web 應(yīng)用程序運行的是本地機器(或其他機器)上新版本的代碼?


可重復(fù)的驗收測試

在執(zhí)行 Selenium 測試時,必須運行 Selenium 服務(wù)器以及要檢驗的 Web 應(yīng)用程序。言外之意,還必須運行應(yīng)用程序中所有相關(guān)的架構(gòu)依賴關(guān)系 —— 對于大多數(shù) Java™ Web 應(yīng)用程序來說,即 Servlet 容器和相關(guān)的數(shù)據(jù)庫。

正如在我的另一篇文章 repeatable system tests 中解釋的一樣,DbUnit 和 Cargo 是兩種我喜歡的技術(shù),可以在依賴數(shù)據(jù)庫的 Web 應(yīng)用程序中實現(xiàn)邏輯重復(fù)。DbUnit 管理數(shù)據(jù)庫中的數(shù)據(jù),而 Cargo 使容器管理以通用的方式實現(xiàn)自動化。下面幾節(jié)將向您展示如何結(jié)合使用 Selenium 和 TestNG 從而確保實現(xiàn)邏輯重復(fù)的驗收測試。

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