自动测试之关键字驱动测试模式初探(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.ltesting.net