51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1973|回复: 1
打印 上一主题 下一主题

[转贴] 软件测试简易自动化测试设计

[复制链接]
  • TA的每日心情
    无聊
    2024-7-12 13:16
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2017-7-19 13:11:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    序言:基于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]);  }  ///////文本框组件//////  //用于搜索文本输入框  //输入:无  //类别:WTextFieldpublic 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操作  //输入:ButtonNamepublic 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、……

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

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2024-9-19 09:07
  • 签到天数: 11 天

    连续签到: 2 天

    [LV.3]测试连长

    2#
    发表于 2017-7-19 16:34:37 | 只看该作者
    是挺简易的了
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-17 15:53 , Processed in 0.063747 second(s), 22 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表