首页 测试 工具 查看内容

QTP学习小结

2014-9-2 12:46| 发布者: | 查看: 338| 评论: 0

摘要:   QuickTest Pro是HP旗下一款基于关键字对象的自动化测试工具,主要用于回归测试和业务逻辑简单,重复量比较大的工作。  (1)QTP录制回放原理  QTP录制时,先根据加载的插件,找到控件所属的父对象类,然后根 ...

  QuickTest Pro是HP旗下一款基于关键字对象的自动化测试工具,主要用于回归测试和业务逻辑简单,重复量比较大的工作

  (1)QTP录制回放原理

  QTP录制时,先根据加载的插件,找到控件所属的父对象类,然后根据QTP对这个父对象类的录制策略,录制控件的属性。

  如,win 自带的计算器,点击按钮“1”。QTP先找到计算机的“1”按钮,是标准win控件的winbutton类,然后winbutton类中强制属性有 nativeclass和text,如果强制属性不能唯一的区分控件,再找辅助属性,还是不能区分,再用顺序中的location或index。(对象识别策略可以通过tools→Object identification来查看)同样的道理,对于计算器这个窗口,其实只要text=“计算器”一个属性就可以了,但是因为window类强制了4 个属性,所以在录制的时候,会在对象库中,保存计算器窗口的4个属性。

  QTP回放,先根据脚本中的对象名,找到测试库中的对象,然后根据测试库对象中的属性,匹配唯一的要运行的控件。

  对比上面计算机中的“1”,运行脚本时,在对象库中找到“1”这个对象,然后根据这个对象,找到属性值 text=1,nativeclass=winbutton,然后匹配到实际运行中的1,这个按钮。那很显然,当把测试库中1这个对象的属性改成 text=2的时候,因为通过属性值查找控件,所以运行时,点击的是2这个按钮。

  录制回放原理的启示

  ·脚本中对象名一定要和测试库中对象名一致,要不然会提示在测试库中找不到对象。

  ·脚本中对象名不一定要和实际运行的对象的对象名一致,但是测试库中对象的属性一定要和执行的控件一致。

  这就好比你打车到人民广场,司机知道人民广场这个地方,然后按照人民广场在那条路上去行驶路线,如果司机认为人民广场在浦东(测试库中的属性和要运行的不一致),那就会开车到浦东,而不是真正的人民广场了。

  (2)QTP参数化

  为什么要参数化。

  QTP是一个自动化的工具,将QTP参数化的好处就是可以讲业务和数据(或者是用例)分离开来,而且更便于维护。

  参数化的内容:1.输入数据,2.对象名,3.对象属性

  输入数据是指将输入到对象的内容进行参数化,典型的例子就是对文本控件框的内容进行参数化。如用户名和密码。

  对象名参数化,是指在脚本中把对象名参数化掉,因为参数化后的对象名必须和对象库中的对象名一致,所以前提就是对象库中包含参数化后的对象。如对计算机的按钮进行参数化,就需要将0-9的所有空间都添加到测试库中。

  对象属性参数化,这种方式比较灵活,就是对象名不做更改,而在对象库中,将对象的属性参数化,执行时根据参数化后的属性,找到执行的控件。

  参数化数据类型:1.datatable,2.environment,3.random number

  (3)对象属性函数

  QTP可以通过对象的方法,获取或设置对象的属性,主要的方法函数是SetTOProperty,GetROproperty,和GetTOProperty等等,set和get,是表示获取还是设置,RO是运行的对象(Running Object),而TO是测试库的对象。

  通过使用属性函数,可以使脚本更加的灵活,比如通过取出运行对象的属性(GetROProperty()),来判断是不是与预期结果相同,然后用 reportor写到测试结果中,又比如对于属性在变化的对象,可以在属性中参数化,也可以用SetTOProperty的方法,动态的更改测试库中对象的属性。例:对于自带的Flight程序,插入订单后,要把此订单发传真,fax页面显示的是order No. (订单号)。因为不知道生成了多少个订单,这个订单号是动态的,可以在打开这个窗口前,用SetTOProperty将窗口的属性变成刚生成好的订单号。

  (4)初识描述性编程

  根据QTP的回放原理,测试库中对象的作用就是在回放时,能够通过测试库中对象的属性,来找到运行对象。而描述性编程就是将这些能找到对象的属性描述出来,脚本就可以根据这些描述,找到运行的对象。描述性编程有两种:

  a.行级描述

  比如计算器的例子,点击“2”这个按钮,用对象库是Window(\"计算器\").WinButton(\"2\").Click,如果有描述性,就是将“2”这个按钮的属性描述出来window(\"计算器\").WinButton(\"text:=2\",\"nativeclass:=button\").Click,当然,因为没有强制属性,只要找到唯一匹配的即可,所以也可以把nativeclass:=Button去掉,只用text这个属性。

  要注意的是:如果父对象用的是描述性编程,子对象就不能用测试库里的对象,还是要用描述性编程。

  b.description对象

  用description创建一个对象,这个对象的属性和要执行的对象的属性匹配,就可以找到需要执行的对象了。还是以计算器“2”这个按钮为例。

  Set myDes=description.Create

  myDes(\"text\").value=\"2\"

  myDes(\"nativeclass\").value=\"button\"

  window(\"计算器\").WinButton(myDes).click

  Set myDes=Nothing

  描述性编程的作用:

  ● 代码灵活,脚本不需要测试库,在另外的机器上运行时,不需要导入。

  ● 在开发还在做对象的时候,可以根据文档,知道对象的属性,方法,然后就可以用描述性编程来制作脚本,而不需要等到对象制作完成。

版权声明:本文出自ermine的51Testing软件测试博客:http://www.51testing.com/?272597

原创作品,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。


鲜花

握手

雷人

路过

鸡蛋

扫一扫关注最新动态

毒镜头:老镜头、摄影器材资料库、老镜头样片、摄影
爱评测 aipingce.com  
返回顶部