您的位置:軟件測試 > 開源軟件測試 > 開源功能測試工具 > Selenium
使用分層的Selenium框架進(jìn)行復(fù)雜 Web 應(yīng)用的自動測試
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2014/12/8 16:34:22 ] 推薦標(biāo)簽:Selenium 開源測試工具

  繼續(xù)上文谷歌搜索的場景,通過實(shí)例來了解TestNG的用法與功能。
  清單5.TestNG應(yīng)用示例
  @Parameters({"url","query-string","btn-id","txt-id","verify-String"})
  @Test
  public void testGoogle(String url,String queryString,String btnID,
  String txtID,String verifyString){
  selenium=new DefaultSelenium("localhost",4444,"*firefox",url);
  selenium.start();
  selenium.open("/");
  selenium.type(txtID,queryString);
  selenium.click(btnID);
  selenium.waitForPageToLoad("30000");
  verifyTrue(selenium.isTextPresent(verifyString));
  selenium.stop();
  }
  上面的代碼清單中,注釋Parameters指定的參數(shù)在TestNG測試框架的配置文件testng.xml里有具體定義,如下所示:
  清單6.testng.xml示例
  不難想到,只要修改testng.xml中的參數(shù)值,能由輸入?yún)?shù)驅(qū)動不同的測試用例。然而,僅僅在testng.xml中指定參數(shù)有很大的局限性,顯然過多的參數(shù)會難以維護(hù),無法井井有條地組織分屬不同Test Cases的輸入。在下文中,我們來解決這個問題。
  回頁首
  基于Selenium的分層測試框架
  作者在工作中,測試基于OSGi平臺的多個插件。每個插件實(shí)現(xiàn)特有的功能,有多條測試路徑需要覆蓋,同時(shí),各個插件之間又有共通之處,可以抽取某些部分進(jìn)行復(fù)用。對此,我們假設(shè)這樣的場景:分別在谷歌、百度和必應(yīng)中搜索各種關(guān)鍵字,并在返回的結(jié)果頁面中驗(yàn)證是否存在目標(biāo)字符串。每個搜索引擎都可以視為一個待測的組件,分別為它們撰寫Test Cases,并組織成一個Test Suite,用于執(zhí)行測試。事實(shí)上,3個搜索引擎的測試由于同質(zhì)性,還能夠合并為一種測試,用不同的輸入?yún)?shù)來指定所要測試的那個搜索引擎。這里視為三個組件,只是為了說明如何在Selenium+TestNG環(huán)境中組織多個測試模塊。
  自上而下地考慮,上段描述的測試場景能夠進(jìn)行分解。Test Suite包含三類Test Cases(谷歌、百度與必應(yīng)),每類Test Cases的一個Test Case由若干可復(fù)用的Test Tasks組成,通過傳入不同的參數(shù),Test Task完成同質(zhì)的不同行為。在Test Task之下,定義相關(guān)文件,包含待測試的Web頁面元素的定位信息。因此,分層Selenium框架有三個層次:
  appObjects——Web頁面元素定位信息,如按鈕與文本框等;
  tasks——測試步驟中可復(fù)用的行為;
  test cases——由tasks組成的測試用例。
  Web元素locators定義與收集
  Selenium根據(jù)XPath來定位Web元素,XPath的相關(guān)知識不屬于本文的內(nèi)容。前面例子中,在TestNG的配置文件testng.xml里定義文本框與按鈕的locators,對于復(fù)雜的測試場景而言,這不是好的實(shí)踐。因此,我們在appObjects層建立文件,將Web頁面元素locators歸入,便于維護(hù)使用。Selenium-IDE的Find功能適于完成這一步驟。文件googlePages.properties的內(nèi)容如下:
  清單7.locators文件示例
  #define the keys and corresponding XPaht locators of google page.
  googleSearchTxtField=//input[@name='q']
  googleSearchBtn=//input[@name='btnG']
  這時(shí),在testng.xml中,刪去locators相關(guān)的parameters,只需要解析.properties文件,生成locators的properties備用。在所附的源碼中可以看到.properties文件的解析器PropUtils的簡單實(shí)現(xiàn)。
  測試任務(wù)分解與實(shí)現(xiàn)
  為說明任務(wù)分解,以簡單的搜索過程為例,可以分為輸入搜索關(guān)鍵字、點(diǎn)擊搜索按鈕、以及驗(yàn)證結(jié)果頁面。實(shí)際代碼如下所示,不難發(fā)現(xiàn),由參數(shù)決定行為方式的測試任務(wù),都接受一個paraMap數(shù)據(jù)結(jié)構(gòu),并根據(jù)其內(nèi)容在方法內(nèi)采取適當(dāng)?shù)男袨椤Mㄟ^這種方式,test cases能夠以參數(shù)配置文件來驅(qū)動測試任務(wù)實(shí)施其想要的行為。
  清單8.Test Task代碼示例
  public void openSite(){
  selenium.open("/");
  }
  public void typeSearchTxtField(HashMap paraMap){
  utils.waitForElement((String)elemMap
  .get(TestGoogleConstants.GOOGLE_SEARCH_TXT_FIELD),30);
  selenium.type((String)paraMap
  .get(TestGoogleConstants.GOOGLE_SEARCH_TXT_FIELD),
  (String)elemMap
  .get(TestGoogleConstants.GOOGLE_SEARCH_TXT_FIELD));
上一頁1234下一頁
軟件測試工具 | 聯(lián)系我們 | 投訴建議 | 誠聘英才 | 申請使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd