很对同学都学习过QTP,也在用QTP写脚本,尤其是商品线与店铺的同学,都制定出了用QTP写脚本的规范,而现在随着Ruby框架越来越稳定,使用的也越来越广泛,用Ruby写脚本是大势所趋。所以很多同学可能会担心,又要学Ruby了之前的QTP是不是白学了,会不会很难啊什么的。其实通过我的个人经验,我也是先写QTP再学的Ruby,如果对QTP有一定了解的话再来学Ruby还是容易的,毕竟2个都是自动化工具,实现的目的都是一样,模型人工进行页面操作,所以很多东西都是通用的,比如在利用dom思想的时候等等。下面介绍下两者的一个关系。
1.从框架的角度看。针对目前netbean框架,可以发现和QTP的框架有很多的相似之处。从编写一个测试用例出发,netbean框架中需要有 page.rb、process.rb、testrun.rb、excel 这四个文件。Page:对页面上需要操作的控件进行描述,这个就类似与QTP中的对象库只不过前者是通过用属性描述的方式来事先准备好操作对象,而后者是直接通过页面抓取的方式将需要操作的控件放到对象库中当然也可以用description方法描述对象。
Process:以动作驱动的方式将page中的对象按照一个测试用例的操作过程组装起来,这里的动作驱动即为一些具体的方法(目前在browser+method有很多现成的方法可以拿来用),这个就与我们在QTP中写的具体脚本类似,也是按照测试用例的操作过程将对象库中的对象进行操作,只不过前者不是具体的执行脚本,不包含执行用例时需要的一些数据参数,而后者可以直接用来执行脚本。
testrun.rb+ excel文件:是netbean框架中用来执行用例的文件,在testrun.rb中调用process并将excel 中的参数传入在testrun.rb中执行。这里的excel 有点类似与QTP中的datatable ,可以在里面放入执行的各种参数。
2.从写脚本的角度看。当我们需要对某个控件进行操作的时候,例如对一个“我的淘宝”按钮进行点击的时候,之前我们用QTP 的时候会先把”我的淘宝”控件先抓进对象库,然后用browser(**).page(**).link(“我的淘宝”).click 实现点击,即从控件所在的浏览器browser到页面page再到控件link然后执行click,这样一个从大范围逐渐到小范围最后定位到控件进行具体动作这样一个过程,而现在如果用Ruby的话,其实也一样的:也是先确定 @ie = Watir::IE.attach(:url,/ daily.taobao.net/),然后在ie上定位link:@ie. link(:class,’mytaobao-entra’),最后执行click ,完整的为:
@ie = Watir::IE.attach(:url,/daily.taobao.net/)
@ie.link(:class,’mytaobao-entra’).click
从上面可以发现,Ruby中用watir封装了很多的方法,可以直接用web对象的属性来定位控件,这个和在QTP中用的描述性编程非常相似,在QTP中我们除了直接抓取对象外也会利用description对象的属性来描述一个对象,而利用的属性也与Ruby里面出现的id,class,name等。
3. 利用dom思想。Dom(Document Object Model文档对象模型) 以树形的层次结构组织的节点或信息片断的集合,因此可以利用页面对象之间的“位置”关系来访问到需要的(结点)对象。同时dom又是与浏览器,平台,语言无关的接口,使得你可以访问。因此,无论是QTP还是Ruby都能通过dom访问web页面其他的标准组件。
当然dom不是ruby中访问对象的唯一方法,在ruby中应用最多的还是watir。平时我们在利用IE tool bar查看页面 HTML文件的时候,会有各种的html tag,在写ruby脚本的时候我们会关心这些tag 的watir方法是什么,怎么用。