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

  繼續(xù)上文谷歌搜索的場(chǎng)景,通過(guò)實(shí)例來(lái)了解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測(cè)試框架的配置文件testng.xml里有具體定義,如下所示:
  清單6.testng.xml示例
  不難想到,只要修改testng.xml中的參數(shù)值,能由輸入?yún)?shù)驅(qū)動(dòng)不同的測(cè)試用例。然而,僅僅在testng.xml中指定參數(shù)有很大的局限性,顯然過(guò)多的參數(shù)會(huì)難以維護(hù),無(wú)法井井有條地組織分屬不同Test Cases的輸入。在下文中,我們來(lái)解決這個(gè)問(wèn)題。
  回頁(yè)首
  基于Selenium的分層測(cè)試框架
  作者在工作中,測(cè)試基于OSGi平臺(tái)的多個(gè)插件。每個(gè)插件實(shí)現(xiàn)特有的功能,有多條測(cè)試路徑需要覆蓋,同時(shí),各個(gè)插件之間又有共通之處,可以抽取某些部分進(jìn)行復(fù)用。對(duì)此,我們假設(shè)這樣的場(chǎng)景:分別在谷歌、百度和必應(yīng)中搜索各種關(guān)鍵字,并在返回的結(jié)果頁(yè)面中驗(yàn)證是否存在目標(biāo)字符串。每個(gè)搜索引擎都可以視為一個(gè)待測(cè)的組件,分別為它們撰寫Test Cases,并組織成一個(gè)Test Suite,用于執(zhí)行測(cè)試。事實(shí)上,3個(gè)搜索引擎的測(cè)試由于同質(zhì)性,還能夠合并為一種測(cè)試,用不同的輸入?yún)?shù)來(lái)指定所要測(cè)試的那個(gè)搜索引擎。這里視為三個(gè)組件,只是為了說(shuō)明如何在Selenium+TestNG環(huán)境中組織多個(gè)測(cè)試模塊。
  自上而下地考慮,上段描述的測(cè)試場(chǎng)景能夠進(jìn)行分解。Test Suite包含三類Test Cases(谷歌、百度與必應(yīng)),每類Test Cases的一個(gè)Test Case由若干可復(fù)用的Test Tasks組成,通過(guò)傳入不同的參數(shù),Test Task完成同質(zhì)的不同行為。在Test Task之下,定義相關(guān)文件,包含待測(cè)試的Web頁(yè)面元素的定位信息。因此,分層Selenium框架有三個(gè)層次:
  appObjects——Web頁(yè)面元素定位信息,如按鈕與文本框等;
  tasks——測(cè)試步驟中可復(fù)用的行為;
  test cases——由tasks組成的測(cè)試用例。
  Web元素locators定義與收集
  Selenium根據(jù)XPath來(lái)定位Web元素,XPath的相關(guān)知識(shí)不屬于本文的內(nèi)容。前面例子中,在TestNG的配置文件testng.xml里定義文本框與按鈕的locators,對(duì)于復(fù)雜的測(cè)試場(chǎng)景而言,這不是好的實(shí)踐。因此,我們?cè)赼ppObjects層建立文件,將Web頁(yè)面元素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的簡(jiǎn)單實(shí)現(xiàn)。
  測(cè)試任務(wù)分解與實(shí)現(xiàn)
  為說(shuō)明任務(wù)分解,以簡(jiǎn)單的搜索過(guò)程為例,可以分為輸入搜索關(guān)鍵字、點(diǎn)擊搜索按鈕、以及驗(yàn)證結(jié)果頁(yè)面。實(shí)際代碼如下所示,不難發(fā)現(xiàn),由參數(shù)決定行為方式的測(cè)試任務(wù),都接受一個(gè)paraMap數(shù)據(jù)結(jié)構(gòu),并根據(jù)其內(nèi)容在方法內(nèi)采取適當(dāng)?shù)男袨。通過(guò)這種方式,test cases能夠以參數(shù)配置文件來(lái)驅(qū)動(dòng)測(cè)試任務(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));
上一頁(yè)1234下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd