亚洲好骚综合-亚洲黄色录像-亚洲黄色网址-亚洲黄色网址大全-99久久99久久-99久久99久久精品国产

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

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

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

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

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

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

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

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

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

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

 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 文件中的參數值

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


接下來,我將定義清單 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");

  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();
 }
}


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

上一頁123下一頁
軟件測試工具 | 聯系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網站地圖
滬ICP備07036474 2003-2017 版權所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd
主站蜘蛛池模板: 亚洲色欲色欲综合网站 | 久久综合狠狠综合久久97色 | 日韩欧美高清视频 | 欧美白人最猛性xxxxx | 制服丝袜视频在线观看 | 在线成人 | 日韩草逼 | 欧美一区视频 | 美国一区二区 | 欧美人一级淫片a免费播放 欧美人妖猛交 | 男女羞羞免费视频 | 亚洲免费网站观看视频 | 五月婷婷综合在线视频 | 久久成人免费视频 | 激情插插插 | 一级毛片视频 | 亚洲国产成人欧美激情 | 伊人久久国产免费观看视频 | 特大一级aaaaa毛片 | 日韩欧美精品综合一区二区三区 | 久久天天躁狠狠躁夜夜不卡 | yy午夜私人影院免费 | 中国美女一级a毛片录像在线 | 俄罗斯一级毛片aaaa | 免费污污视频网站 | 欧美成人怡春院在线激情 | 天天摸天天爽视频69视频 | 天堂网视频在线 | 日韩欧美国产成人 | 日韩视频免费 | 亚洲免费成人在线 | 日韩一区二区三区不卡 | 亚洲精品福利网站 | 波多野结衣精品一区二区三区 | 曰批人成在线观看 | 日韩福利网 | 精品久久久久久久九九九精品 | 欧美另类丰满熟扫乱xxxxx | 中国一级特黄剌激爽毛片 | 91看片淫黄大片欧美看国产片 | 天天摸夜夜摸夜夜狠狠摸 |