版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明,否则将追究法律责任。
本文出自asoqa的51Testing软件测试博客:http://www.51testing.com/?233320
老实说,不接触QTP的研究已经有1年了,这1年一直在从事单元测试和接口测试的工作。最近有同事玩QTP,兴趣被引上来了,重新回味一下当年对QTP的研究。
看到很多人被QTP弄得晕头转向,我深有感触,有一句话突然浮上心头“不识庐山真面目,只缘身在此山中”。当你接触并研究过多个工具之后,会发现道理原来就是这么简单。这里也送迷路者一句话:工具永远只是工具,工具永远是被利用的,你更需要把握问题的本质。
废话不多说了,当年我用的版本是QTP9.0,这里把我对QTP的一些认识重新整理,和各位分享,仁者见仁,智者见着,大家相互学习,共同切磋。有什么不正确的地方,欢迎大家指出。整理的思路我按照从浅入深逐步展开,以便大家理解。例子就以Web应用为例,这个我比较熟悉,但道理是共通的。当然要了解本文,你还是需要具备基本的QTP知识,至少要知道录制、回放、对象库、描述性编程等基本概念。
QTP对象库
例如我们以Google的搜索为例录制脚本,代码如下:
Browser("Google").Page("Google").WebEdit("q").Set "qtp"
Browser("Google").Page("Google").WebEdit("q").Submit
当录制下这段代码之后,QTP做了哪些事情呢?
1.首先最明显的在QTP主窗口的专家视图下多了两行代码(废话-_-!)
2.其次我们打开Object Repository,发现QTP创建了一些对象
QTP自动生成的代码怎么理解?结合Object Repository,可以这样理解,有一个名叫Google的根节点Browser对象,这个对象中有一个名叫Google的Page对象,Page对象中有名叫q的WebEdit对象,WebEdit对象执行了Submit方法。实际上Browser()这是Browser对象的默认方法,这个方法接收一个对象名参数,返回Browser对象,Page和WebEdit也类似。除了用对象名参数化对象方法之外,还可以用其他的属性或者对象参数化。
这段代码涉及3种类型的对象:Browser对象、Page对象、WebEdit对象。怎么知道这些对象的类型,可以在Object Repository窗口的右侧的Class属性就知道了。右侧的有部分属性是不能修改的,有部分属性是可以修改。可修改的属性都有一个默认显示的列表,点击添加按钮可以改变默认值的设置。这个有什么作用呢?默认的属性是QTP用来描述抓取下来的对象的,你可以通过修改它让QTP在执行时根据你的设置灵活的匹配实际的对象。
本文出自asoqa的51Testing软件测试博客:http://www.51testing.com/?233320
QTP怎么去标识一个对象?
在录制时,QTP根据Object Identification中定义的对象属性在录制时识别页面的元素,并映射成QTP的测试对象(Test Object, TO);同时根据Web Event Configuration中定义的规则识别对象事件。默认QTP自带了对ActiveX、Visual Basic、Web对象的识别规则,其他例如Java、Flash等的需要加载相应插件。
在回放时,QTP根据测试对象的属性定位实际页面上的对象(Run-time Object, RO),并在RO上执行事件。如果回放时找不到对象,QTP会默认启动智能识别(Smart Identification),智能识别的规则在Object Identification中单独定义。
More About录制/回放
录制的主要目的在于获取对象,以便回放时能够识别。获取对象的方法有几种方式,录制只是其中一种,也就是录制这一步不是必须的,可以跳过。那还有哪些方式可以获取对象呢?
1. 用Object Repository的Add Object直接抓取对象,其实也是另一种形式的录制
2. 常说的描述性编程,描述性编程又可以分成两种基本类型:基于QTP Test Object的描述性编程和基于DOM Object的描述性编程。后者需要对对象识别的理解更加深入,这里稍后介绍。而前者就是大家十分熟悉也经常使用的,具体有三种不同的使用方式:
a) Descrīption和ChildObjects组合
Set ōDesc = Descrīption.Create()
oDesc("micclass").Value = "WebRadioGroup"
Set ōbjs = Browser("Google").Page("Google").ChildObjects(oDesc)
objs(0).Select "#1"
b) 用Descrīption对象参数化Test Object
Set ōDesc = Descrīption.Create()
oDesc("name").Value = " 手气不错"
Browser("Google").Page("Google").WebTable("高级搜索").WebButton(oDesc).Click
c) 用属性参数化Test Object
Browser("Google").Page("Google").WebTable("高级搜索").WebButton("name:=手气不错").Click
默认的,录制回放时的事件都是QTP封装后的事件。
(待续。。。)