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

發表于:2012-12-28來源:淘測試作者:雷藏點擊數: 標簽:關鍵字驅動
比如說登錄,可以劃分為: A.獲取登錄頁面、輸入用戶名、輸入密碼、提交四個指令 也可以不進行劃分 B.就一個登錄指令,包含A中所有步驟,只是將登錄

  比如說“登錄”,可以劃分為:

  A.“獲取登錄頁面”、“輸入用戶名”、“輸入密碼”、“提交”四個指令

  也可以不進行劃分

  B.就一個“登錄”指令,包含A中所有步驟,只是將“登錄URL”,“用戶名”,“密碼”作為參數暴露

  這里我傾向于B的分法,也就是說“將一個流程作為一個指令,將流程中所涉及的所有可變因素作為指令的參數暴露”。這樣,我們只要對每個流程做好封裝,以后就可以一勞永逸地重復使用它。

  從技術的角度來看,我們可以定義一個接口,并將可供用戶使用的指令放置其中。代碼如下:

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

  /**

  * 遙控器

  * @author leizang.cs

  *

  */

  public interface ActionCommand {

  /**

  * 用戶登錄

  * @param url 登錄url

  * @param nick 用戶名

  * @param passWord 密碼

  */

  public void login(String url, String nick, String passWord);

  /**

  * 退出

  */

  public void loginOut();

  /**

  * 執行訂購

  * @param subOption 訂購入參

  */

  public void doSub(SubOption subOption);

  /**

  * 訂購成功后校驗數據庫

  * @param dbCheckOption 校驗入參

  * @param needCheckedTables 需要校驗的表格

  */

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

  /**

  * 數據庫修改或刪除

  * @param sql 需要執行的sql

  */

  public void dbExecute(String... sqls);

  }

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

  這樣我們第一個問題就解決了。下面來看第二個問題。

  <!--[if !supportLists]-->2、 <!--[endif]-->制造商困擾之二——機器人問題

  機器人可以正確執行遙控器發出的各種指令。從技術的角度說就是要求測試框架搭建人員,正確、穩定地實現遙控器中的各種指令。至于如何實現,這跟具體的產品線功能有關,這里僅給出我實現的部分代碼,僅供參考:

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

  public class ActionCommandImpl implements ActionCommand{

  private WebDriver driver;

  private JdbcTemplate jdbc;

  @Override

  public void dbExecute(String... sqls){

  for(String sql: sqls){

  jdbc= CommonUtil.getJdbcFromSql(sql);

  jdbc.execute(sql);

  }

  }

  @Override

  public void login(String url, String nick, String passWord){

  try{

  driver= new HtmlUnitDriver();

  driver.get(url);

  WebElement userName= driver.findElement(By.id("TPL_username_1"));

  userName.sendKeys(nick);

  WebElement passWd= driver.findElement(By.name("TPL_password"));

  passWd.sendKeys(passWord);

  WebElement submit= driver.findElement(By.className("J_Submit"));

  submit.click();

  }finally{

  writePage();

  }

  }

  @Override

  public void loginOut(){

  driver.quit();

  }

  /**

  * @dscription 訂購接口

  * @param subOption 訂購參數

  * @throws ITestException

  */

  @Override

  public void doSub(SubOption subOption)throws ITestException{

  if(subOption== null){

  Assert.fail("訂購參數不能為空!");

  }

  String subUrl= subOption.getSubUrl();

  CycleEnum cycle= subOption.getCycle();

  log("傳入參數為:");

  look(subOption);

  if(subUrl== null || subUrl.isEmpty()){

  Assert.fail("訂購Url不能為空!");

  }

  if(cycle== null){

  Assert.fail("訂購周期不能為空!");

  }

  try{

  driver.get(subUrl);

  log("\n獲取頁面:"+ subUrl);

  WebElement period= null;

  switch(cycle){

  case ONE_MONTH:

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

  period.setSelected();

  break;

  case ONE_SEASON:

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

  period.setSelected();

  break;

  case HALF_YEAR:

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

  period.setSelected();

  break;

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

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