使用 Selenium 和 TestNG 進行編程式測試(2)

發表于:2011-09-19來源:未知作者:領測軟件測試網采編點擊數: 標簽:selenium
Selenium 和 TestNG TestNG 以其靈活性和參數化 fixture 成為定義 Selenium 的驅動驗收測試的首選。TestNG 能夠定義測試依賴項并返回失敗的測試,以及其易用性,使

  Selenium 和 TestNG

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

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

  圖 1. 創建小部件的 Web 表單

創建小部件的 Web 表單

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

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

包含下拉列表的 Web 表單

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

  圖 3. 返回的 Web 頁面顯示狀態

返回的 Web 頁面顯示狀態

  結合使用 Selenium 和 TestNG 驗證簡單的 Create Widget 用例是一種可管理的應用:

  配置并啟動 Selenium 服務器的實例。

  與 Create Widget Web 表單交互并提交它。

  檢驗結果頁面是否包含具有小部件名稱的成功信息。

  停止 Selenium 服務器實例。

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

  Create Widget 測試用例

  我希望對 Selenium 服務器進行靈活的配置,所以我將編寫一個參數化 fixture(TestNG-Selenium 樣式),一般可以使用它來為不同瀏覽器、不同位置甚至混合的 Web 應用程序地址(類似 localhost 和產品)創建 Selenium 服務器。清單 4 定義了我所配置的靈活的 Selenium 服務器 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();

  }

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

  清單 5. TestNG testng.xml 文件中的參數值

  接下來,我將定義清單 6 所示的測試用例,它也包含一個參數,用于進行測試的應用程序的基 URL。該測試將促使瀏覽器在 Web 應用程序內打開特定頁面,并操作 圖 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");

  }

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

  結果產生一個靈活的文本類,它將檢驗兩種場景:一種是良好的場景,而另一種是沒有提供定義的邊界用例,如清單 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");

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97