软件测试工具中QTP中使用描述性编程

发表于:2011-01-05来源:作者:点击数: 标签:软件测试自动化惠普关键字应用软件
软件测试工具中QTP中使用描述性编程 Mercury QuickTest 企业级 自动化测试 工具! 目前已经被惠普收购,正式名字为HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 10.0. HP QuickTest Professional 提供符合所有主要 应用软件

软件测试工具中QTP中使用描述性编程

Mercury QuickTest 企业级自动化测试工具!

  目前已经被惠普收购,正式名字为HP QuickTest Professional software ,最新的版本为HP QuickTest Professional 10.0.

  HP QuickTest Professional 提供符合所有主要应用软件环境的功能测试回归测试的自动化。采用关键字驱动的理念已简化测试用例的创建和维护。它让用户可以直接录制屏幕上的操作流程,自动生成功能测试或者回归测试用例。专业的测试者也可以通过提供的内置脚本和调试环境来取得对测试和对象属性的完全控制。

在QTP中使用描述性编程是一个提高QTP脚本利用率的很好的方式。
  通常QTP是通过对象库来识别不同的对象,而描述性编程是QTP另外一种能够识别对象的途径,它不依赖于对象库,通过增加一些对象的描述来识别对象的。
  说明:本例子是以Flight飞机订票系统的登陆界面为测试页面进行描述的。
  步骤一:录制脚本
  Dialog("Login").WinEdit("Agent Name:").Set "Holly"
  Dialog("Login").WinEdit("Password:").SetSecure "46ef0dc7efe5834c73673898279af1204fea51a7"
  Dialog("Login").WinButton("Cancel").Click
  共录制3步操作,输入Agent Name, Password, 点击Cancel按钮
  步骤二:初级描述性编程

Dialog("Regexpwndtitle:=Login").WinEdit("Attached text:=Agent Name:").Set "Holly"
Dialog("Regexpwndtitle:=Login").WinEdit("Attached text:=Password:").Set "Mercury"
Dialog("Regexpwndtitle:=Login").WinButton("Class Name:=WinButton", "text:=Cancel").Click
在这里要注意有三点:
1)如果需要两个以上特性来描述一个对象,需要使用逗号(,)对描述性语言进行分割
2)使用:=来连接属性和属性值,并且:=两边不能有空格
3)使用SPY查看对象的属性名和属性值(Tools -> Object Spy)
步骤三:描述性编程提高
Dim descEditLogin
Set descEditLogin = Description.Create()
descEditLogin("Class Name").Value = "Dialog"
descEditLogin("Regexpwndtitle").Value = "Login"
Dialog(descEditLogin).WinEdit("Attached text:=Agent Name:").Set "Holly"
Dialog(descEditLogin).WinEdit("Attached text:=Password:").Set "Mercury"
Dialog(descEditLogin).WinButton("Class Name:=WinButton", "text:=Cancel").Click
在这里需要注意有两点:
1)把经常使用到的对象定义为一个对象变量,方便以后调用,减少代码工作量和错误
2)使用SPY获取对象的属性和属性值
步骤四:使用自定义的环境变量
在File>>Settings>>Environment中选择user-defined,增加一个变量
dlgLogin = “Login”
这样脚本可以被修改为:
Dim descEditLogin
Set descEditLogin = Description.Create()
descEditLogin("Class Name").Value = "Dialog"
descEditLogin("Regexpwndtitle").Value = Environment.Value("dlgLogin")
Dialog(descEditLogin).WinEdit("Attached text:=Agent Name:").Set "Holly"
Dialog(descEditLogin).WinEdit("Attached text:=Password:").Set "Mercury"
Dialog(descEditLogin).WinButton("Class Name:=WinButton", "text:=Cancel").Click
当然,参数化的方式很多,这边介绍的是使用环境变量
步骤五:从XML文件导入环境变量
dlgLogin
Login
可以使用手工导入,也可以使用LoadFromFile自动导入
  总结:优点是当对象的一些属性变更后,脚本更容易维护。比如说对于一个通用对象,比如save, reset, cancel等按钮,一个页面有3个,30个页面就有90个对象,假如save变成保存,reset变成重置,cancel变成取消,那么对象库就会产生很大的变动。而使用了描述性编程只需要在导入的XML文件中修改一个值就可以了。当然描述性编程的作用远远不止这些,这次只是抛砖引玉,希望大家共同进步。在QTP中使用描述性编程是一个提高QTP脚本利用率的很好的方式。通常QTP是通过对象库来识别不同的对象,而描述性编程是QTP另外一种能够识别对象的途径,它不依赖于对象库,通过增加一些对象的描述来识别对象的。
  说明:本例子是以Flight飞机订票系统的登陆界面为测试页面进行描述的。
  步骤一:录制脚本
Dialog("Login").WinEdit("Agent Name:").Set...
  QTP的工作原理有点类似人类社会的某些场景.比如一个朋友委托你带东西给A,如果你认识A,这表明A的容貌特征以及一些联系已经在你脑海有了印象,那么你只要找到了A的住所,那么这个任务就很容易完成了,如果你根本就不认识A,则这个任务就很难完成了. 那在QTP中有没有一种方法,无须在对象库中记录任何关于某个对象的信息,就可以完成对该对象的操作呢,有.那就是描述性编程,其工作原理就象上面这个例子.
  在QTP中,有一按钮对象,对它的操作如下:Dialog("Login").WinButton("OK").Click但是如果我们在对象库中删除这个对象后,执行这句话就会出错,提示找不到对象,在这个时候,我们就可以通过描述性编程给他指定对象及其他的一些属性,修改如下Dialog("Login").WinButton("text:=OK").Click
  上面脚本中,通过WinButton("text:=OK")明确告诉QTP去寻找文本属性为OK的按钮,于是QTP正确识别到该对象,顺利的执行了脚本.这种不需要在对象库中存储对象的信息,就可以执行对象操作的方法,就是QTP中比较高级的用法:描述性编程(descrīptive progamming).描述性编程和传统的QTP脚本的区别是:他把需要识别的对象的属性从对象库中转移到了脚本里面,通过在脚本里面的特殊语法格式.来告诉QTP识别对象的方法.描述性编程更加灵活,因为他不需要经过录制这个步骤,可以直接通过编程的方式操作任何一个你想操作的对象,只要你在测试脚本代码里提供给QTP识别该对象的足够信息
  描述性编程的语法格式如下:
  micClasas("property1:=value1","property2:=value2")
  micClass标志某个对象的类别,括号里面通过jproperty:=value的形式告诉QTP识别该对象的必要属性.我们继续修改一下测试脚本:Dialog("Login").WinButton("text:=OK").Click修改后:Dialog("Login").WinButton("nativeclass:=Button","text:=OK").Click.F5执行,结果运行顺利.这次修改,我们使用了一个通用的对象类WinObject,而把按钮当作一个基本属性nativeclass:=Button,同样可以完成对该按钮的操作
  由上面的叙述我们可以看出来,描述性编程没有严格的要求,只要遵循一个原则:在代码中告诉QTP足够他识别该对象的属性,QTP就可以不通过对象库,而是通过描述性编程的方式完成对指定对象的操作.所以描述性编程没有什么神秘的,他无非是把原来存储在对象库中的信息提到代码中来了而已.

原文转自:http://www.ltesting.net