自動測試之關鍵字驅動測試模式初探(3)

發表于:2012-12-28來源:淘測試作者:雷藏點擊數: 標簽:關鍵字驅動
case ONE_YEAR: period=driver.findElement(By.id(p-half)); period.setSelected(); break; default: Assert.fail(入參中周期值不合法!); } WebElement isAgree= driver.findElement(By.id(J_Agreement));

  case ONE_YEAR:

  period=driver.findElement(By.id("p-half"));

  period.setSelected();

  break;

  default:

  Assert.fail("入參中周期值不合法!");

  }

  WebElement isAgree= driver.findElement(By.id("J_Agreement"));

  isAgree.click();

  ((HtmlUnitDriver)driver).setJavascriptEnabled(true);

  String js= "document.getElementById(\"J_PayMoney\").disabled = false";

  ((HtmlUnitDriver)driver).executeScript(js);

  log("執行JS:"+ js);

  WebElement payMoney= driver.findElement(By.id("J_PayMoney"));

  String prePayUrl= driver.getCurrentUrl();

  payMoney.click();

  String afterPayUrl= driver.getCurrentUrl();

  if(!isPageSkip(prePayUrl, afterPayUrl)){

  throw new ITestException("訂購失敗!請查看"+ DIRECT+ "目錄確認頁面信息\n");

  }

  WebElement bd= driver.findElement(By.className("bd"));

  log("\n"+ bd.getText());

  }catch(NoSuchElementException e1){

  throw new ITestException(e1);

  }finally{

  writePage();

  }

  }

  /**

  *

  * @param dbCheckOption 數據庫校驗參數

  * @param checkedTables 需要校驗的表

  */

  @Override

  public void checkSubDB(SubDbCheckOption dbCheckOption, TableEnum...needCheckedTables){

  for(TableEnum table: needCheckedTables){

  log("\n");

  switch(table){

  case UPP_BIZ_ORDER:

  checkUppBizOrder(dbCheckOption);

  break;

  case UPP_SUB_PLAN:

  checkUppPlanSub(dbCheckOption);

  break;

  case UPP_PROD_SUBSCRIPTION:

  checkUppProdSubscription(dbCheckOption);

  break;

  default:

  Assert.fail("暫無此表校驗邏輯:"+ table.name());

  }

  }

  }

  /*****************************************代碼分割線*****************************************/

  在這里我引入了JAVA的GUI測試技術。經過實踐證明:

  <!--[if !supportLists]-->1) <!--[endif]-->對WebDriver的使用不僅方便,而且執行快速,平均一個用例5S就能運行完成

  <!--[if !supportLists]-->2) <!--[endif]-->更重要的是測試代碼完全獨立于開發代碼,測試環境最接近真實的手工測試環境,用這種方法實現的自動化,只是模擬手工測試工作,并將其自動進行

  <!--[if !supportLists]-->3) <!--[endif]-->指令正確實現以后,編寫用例相當快捷方便,大大提高用例編寫效率

  <!--[if !supportLists]-->4) <!--[endif]-->腳本穩定、健壯且易于維護,只要頁面不發生變化,對指令的實現就無需變化,大大降低維護成本

  這樣,上面提出的兩個問題就解決了,我們編寫出的代碼就會像第一節所示的一樣,只要準備好相關數據,發發指令就可以了。下面我們來解決用戶的困擾。

  <!--[if !supportLists]-->3、 <!--[endif]-->用戶的困擾——數據準備問題

  還記得上節劃分指令粒度的時候我們是按流程來劃分的嗎?在這里它的好處就體現出來了。我們把一個流程作為一個指令,將流程中涉及的可變因素作為參數暴露,并將指令在接口中定義,實現與定義分開,這樣對于每一個指令來說,其參數個數是固定的,而且對于每條產品線來說指令的個數也比較有限。這非常有利于我們將其“模板化”。說到模板化,大家自然會想到界面,于是就有三種方式進行模板化:“頁面”,“軟件客戶端”,“eclipse插件”。我認為最簡單、最方便的當屬“eclipse插件。”下面我給出插件示意圖:

  <!--[endif]-->

  最左邊①是用例的目錄樹,當選中一條用例后第②部分為該用例的有序指令,第③部分為“指令池”,可以從中選擇需要的“指令”。

  這樣我們編寫用例就可以分為三步:

  <!--[if !supportLists]-->1、 <!--[endif]-->在①中新建一條用例并輸入用例名稱,此時第②部分應該為空

  <!--[if !supportLists]-->2、 <!--[endif]-->選擇方法類型,有“@BeforeClass”,”@Before”,”@Test”,”@After”,”@AfterClass”五種選擇,并從③中選擇需要的“指令”

  <!--[if !supportLists]-->3、 <!--[endif]-->

  <!--[if !supportLists]-->3、 <!--[endif]-->存據填入期擊ommand錄入數據,雙擊“doSub”指令,此時彈出如下圖所示的參數錄入框,將數據填入其內并保存,保存后在eclipse中就會自動生成如第一節所列出的用例代碼,其中“SUB_PLAN_URL”為poperties中定義的變量,也可以在界面中進行關聯、維護。

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

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