求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
软件测试简易自动化测试设计
 

发布于2013-6-24

 

序言:基于RFT的swing界面的自动化测试,这里不是说怎么去使用工具,而是怎么将RFT融入到自动化测试设计中,其实RFT在整个设计中,个人觉得,只是一个辅助的角色,如果时间允许的话,谁也不想用这么昂贵还这么不灵活的RFT,接下来,你读完这个系列后,你就知道为什么我这么说了。

一、简易自动化测试架构说明

很多人都应该了解了GUI自动化测试的通用架构划分如下:

1、对象层AppObject,存储基于find()搜索控件的具体方法,我分成了两大类,一类是通用的基本java控件、一类的不同产品线的相应的自己拓展的控件类。

2、方法层AppLib,存储简单的操作函数,在这里,我分成了两大类:Lib与Method类,Lib类用于对象的基本操作方法,Method类存储用于一些基本的自己拓展的操作方法,例如:外部文件读写操作、日志写出操作、模拟键盘鼠标操作(Robot类拓展)等。

3、用例层AppCase,调用测试方法进行测试用例的组织,不同的产品线对应不同的测试集,一个简单的测试功能模块对应一个测试用例。

二、简易自动化测试架构的实例

以下可以看一个整体的简单实例操作:

1、AppObject文件夹中有一个object.java文件,存储一系列的通用的控件查找方法:

实例如下:

////////按钮组件//////////

  //用于搜索其上的按钮

  //输入:按键名称

  //类别:GuiTestObject

  public GuiTestObject getButton(String buttonName)

  {

  RootTestObject root = getRootTestObject();

  TestObject[] to = root.find(atDescendant(".class","javax.swing.JButton","accessibleContext.accessibleName",buttonName));

  return new GuiTestObject(to[0]);

  }

  ///////文本框组件//////

  //用于搜索文本输入框

  //输入:无

  //类别:WTextField

public WTextField getTextField(String LabelName)

  {

  RootTestObject root = getRootTestObject();

  TestObject[] to = root。find(atDescendant(".class","javax.swing.JTextField",".priorLabel",LabelName));

  return new WTextField(to[0]);

  }

说明:

a、GuiTestObject是直接继承于RFT的所有对象的父类TestObject,其里面包含了一些简单的操作,而我只想用Button的click方法,所以我这里就直接返回的是GuiTestObject类。

b、RootTestObject也是直接继承与RFT的TestObject,不过它与GuiTestObject类不同的是,它是直接指向被测的应用程序的,即是被测试应用程序的控件的一个全部的view,是按数据结构中的树的方式进行储存的,其中有方法为find(),可以基于属性用来在这个RootTestObject中查找你所需要的控件。

c、find()方法查找的方式有三种,我重点说一下atChild与atDescendant,前者是在查找根节点的直接子对象、而后者是查找所有的子对象。后面当然是要查找的控件的具体的属性了,在这里,我们可以定义一个基本不变的属性,然后定义一些需要在测试用例中改变的属性,例如:按钮,这里我设计的就是基于按钮名字来进行查找了,如果名字一样的话,你就得用一个别的方式了,例如:index。

d、WTextField是IBM的ITCL提供的一些控件包裹类,其实就是继承了一些RFT的基本类,然后自己写了一些方法而形成的类罢了,你也可以自己拓展一些控件类嘛。

2、AppLib文件夹中有一个Lib。java的文件,其类存储对查找到的控件对象操作的基本方法。

实例如下:

//下面是对对象的初始化

  public AppObject.Rc_Object getObject = new AppObject.Rc_Object();

  //下面是对共同方法的实例化

  public AppLib.Rc_Method getMethod = new AppLib.Rc_Method();

  //////////////////////按钮组件操作/////////////////////////////

  //采用动态搜索的方法进行找到Button组件,并且执行click操作

  //输入:ButtonName


public void ChooseButton (String buttonName)

  {

  getObject.getButton(buttonName).click();

  sleep(3);

  try {

  //向外部日志写其完成测试的步骤

  getMethod.logWriter("完成"+ buttonName + "的ChooseButton方法;");

  } catch (Exception e) {

  //可以调用异常处理模块进行异常处理

  }

  }

  //////////////////////文本框组件操作/////////////////////////////

  //采用动态搜索的方法进行找到TextField组件,并且执行click操作

  //输入:TextFieldName

  public void ChooseTextField (String LabelName,String TextName)

  {

  sleep(3);

  getObject.getTextField(LabelName).setText(TextName);

  //用JAVA的语句将其UserName拆分成一个一个的字符进行输入

  try {

  getMethod.logWriter("完成" +LabelName+" ChooseTextField方法");

  } catch (Exception e) {

  //可以调用异常处理模块进行异常处理

  }

  }

说明:

a、ChooseButton (String buttonName)方法就是找到一个名字为buttonName的按钮进行点击操作。ChooseTextField (String LabelName,String TextName)方法就是找到一个前缀名为LabelName的文本框进行输入TextName。

b、此处有一个getMethod.logWriter是用于向外部LOG写入具体的控操作信息的。当然你也可以不写在方法中,写在测试用例中也可以,不过需要其返回一个button的名称,然后在测试用例中一个方法获得这个name,然后再将信息写到日志中,个人认为后者方式较好,因为其可拓展性强。

c、这里以前设计的是在此抓取异常,然后进行异常处理操作,你可以选择调用一个共同的异常模块,我的异常处理方式是:抓取到异常,则关闭整个测试程序,重新进行下一个测试用例。

3、AppTestCase文件夹中有一系列产品线的文件夹,然后每个文件夹对应每个功能模块,这里就不多说了,根据自身公司部门的情况决定吧。

三、一些需要注意到的地方

1、用动态搜索的方法是脱离RFT的对象库的,所以无需使用RFT的对象映射机制了。

2、你可以在外部基于测试方法进行测试用例的编写。

3、因为整个系列只用了RFT中的RationalTestScript类中的方法,所以我本想直接用eclipse导入含有这个类的jar包,然后基于eclipse进行其测试用例的编写,但没成功,因为其回放的机制中还用到了很多具体的类,这些就是不可见的了,看样子商业工具在这方面做的很严密啊。

4、根据这样,你就可以想尽办法,利用RFT提供的CMD接口,将RFT隐藏起来吧。

5、其实一个自动化测试框架而言,RFT最好能做到成为其框架的一个插件,所以用到的RFT东西越少就越好了。

6、想想原理挺简单的,可是自己摸索的时候发现却要走了很多弯路,但是摸索的过程对于以后对整个测试活动理解还是很有帮助的,所以,个人觉得,不要怕走弯路,关键要摸。

四、接下来的系列

1、用例驱动与数据驱动机制。

2、图形界面操作设计。

3、……

总之,此处只是简单说明了一种通用的自动化测试层次,可以根据自己部门特殊的情况进行改善或者拓展,这里的方式只能是简单的使用,如果要规模化的话,个人觉得,还远远不够,工具只是一种服务,而这里需要是一种调用服务,即"框架"。

相关文章

微服务测试之单元测试
一篇图文带你了解白盒测试用例设计方法
全面的质量保障体系之回归测试策略
人工智能自动化测试探索
相关文档

自动化接口测试实践之路
jenkins持续集成测试
性能测试诊断分析与优化
性能测试实例
相关课程

持续集成测试最佳实践
自动化测试体系建设与最佳实践
测试架构的构建与应用实践
DevOps时代的测试技术与最佳实践
 
分享到
 
 
     


LoadRunner性能测试基础
软件测试结果分析和质量报告
面向对象软件测试技术研究
设计测试用例的四条原则
功能测试中故障模型的建立
性能测试综述
更多...   


性能测试方法与技术
测试过程与团队管理
LoadRunner进行性能测试
WEB应用的软件测试
手机软件测试
白盒测试方法与技术


某博彩行业 数据库自动化测试
IT服务商 Web安全测试
IT服务商 自动化测试框架
海航股份 单元测试、重构
测试需求分析与测试用例分析
互联网web测试方法与实践
基于Selenium的Web自动化测试
更多...