QTP识别对象原理
QTP对每个控件类都定义了一些强制属性和辅助属性。当qtp对对象进行识别的时候,首先qtp会取出控件的所有强制属性,如果这些强制属性能够唯一标识这个控件则选强制属性来标识控件,如不能唯一标识控件,qtp则逐一取出控件类的辅助属性直到能唯一标识控件为止。
如果使用强制属性和辅助属性还不能唯一标识控件。则有以下两种可能:
QTP对控件类的识别使用了智能识别(Smart Identification),qtp会忽略之前对强制属性与辅助属性的识别,这时qtp会使用smart identification中的basic filter properties和optional filter properties来对对象进行识别. basic filter properties就是一些控件的基础属性,例如button的Name,这个属性变了button也就变成另外一个button了。
如果对控件类的识别没有使用Smart Identification,系统会使用Ordinal Identifier来对控件进行识别。
2. QTP的测试流程。大多自动化测试工具都是使用录制回放这种方式:
录制:QTP录制方式有三种,标准录制,模拟录制与低级录制。
标准录制一般就是最常用的,录制对标准控件的一些操作,如对button的click,winEdit的Set value等等。
模拟录制,可以录制鼠标的轨迹,主要用与绘图此类软件的录制。
低级录制,与标准录制不同,不是Object.Operation value而是记录屏幕坐标点上的操作。稳定性较差。
录制的时候,QTP会将用户的操作以VBscrīpt的形式保存在Expert View里头,录制的时候还会判断控件是否存在对象库里面,如果没有则创建对象。对象库里面的对象称为Test Object与程序UI上的控件对象Run Time Object相对应。
和TO、RO相关的几个函数有:
GetTOProperty():取得仓库对象的某个属性的值
GetTOProperties():取得仓库对象的所有属性的值//返回一个对象类型,属性集为对象标识属性集
SetTOProperty():设置仓库对象的某个属性的值
GetROProperty():取得实际对象的某个属性的值
录制完成需要对代码进行修改,增加代码的稳定性与可移植性。
1. Add Comments.代码中加必要的解释能增加代码的可读性,利于回归测试中代码的维护。
2.增加控制流语句。如程序的登陆,正常流程是输入验证信息,点击登陆按钮进入主界面。若用户已经登陆则系统就应该弹出一个确认框问用户是否需要删除原来的session。这是录制的教本里面我们就应该加一个判断,判断是否这个弹出框存在。
3.参数化。QTP参数化有一下几种方式:1)action parameter. Keyword View ->右键ActionName->Action Properties, Parameter tab.可以配置action的传入参数与传出参数,参数的使用为:strInput = Parameter("input"), input为action的传入参数。Parameter("output") = strOutput, output为action的输出参数。2)Environment,在脚本中使用strTemp = Environment("environmentVariable"). 3)datatable,使用DataTable.SetCurrentRow(RowVale) strTemp = DataTable.RowValue(Parameter, SheetID).
4. CheckPoint.
5.同步点. WaitProperty(Property, value, Timeout). Object.exist(Timeout). Wait Time.
6. QTP错误处理机制:
QTP有三种错误处理机制:
1,全局错误响应:Test setting中run设置
全局错误响应是qtp的系统缺省错误处理,当没有使用其他错误处理方式时,系统会自动调用这里指定的方式进行错误处理。
在整个脚本有效。若是出错在Function Library,则错误号只存在library,不会传到Action中。
2,VBscrīpt on Error错误处理:On Error Resume Next
VBscrīpt的错误处理方式,三种相关方式为:
a)On Error Resume Next:一旦这个语句已经被处理,脚本将继续后面的程序,不理会已经出现的错误。
b)On Error GoTo 0:使用On Error GoTo 0语句恢复缺省的错误处理行为,在运行这个语句后,发生的运行期错误将导致缺省错误处理,在qtp中,缺省的出错处理就是全局错误响应。
c)Err对象:Err对象有三个属性Number, Source, Descrīption. Err对象在运行时错误发生的时候赋予新的值,原来的值将被丢弃。Err对象是全局的,不受函数调用的影响。Err对象可以使用clear方法清空。任何时候使用On Error Resume Next或者On Error GoTo 0都会清空Err对象。
只对语句所在的函数或Action中该语句之后的代码生效,对于子函数,调用Action均无效。若On Error语句存在Action中而出错在Function Library则系统会调用全局错误响应处理。若是Action中函数调用,则会返回到使用On Error语句的环境中。
3,错误恢复场景:Recovery Scenario.
触发条件有:
a) Pop-up Window
b) Object state
c) Test run error.
d) Application Crash.
错误恢复有以下几种方式:
a) Keyboard or mouse operation
b) Close Application process
c) Function Call
d) Restart Microsoft Windows
7.关于虚拟对象的使用:
虚拟对象管理器中显示的虚拟对象集合存储在您的计算机中,而不是随包含虚拟对象步骤的测试或组件存储。这意味着如果您在测试或组件步骤中使用虚拟对象,则仅当在包含正确的虚拟对象定义的计算机中运行时,该对象在运行会话过程中才能被识别。要将您的虚拟对象集合定义复制到另一个计算机,请将您的<QuickTest安装文件夹>\dat\VoTemplate文件夹的内容(或该文件夹中的单个.vot集合文件)复制到目标计算机上的相同文件夹中
<QuickTest安装文件夹>\dat\VoTemplate文件夹只有在已经定义虚拟对象的情况下才会出项
8.使用RegisterUserFunc注册用户定义的测试对象方法
RegisterUserFuncTOClass, MethodName, FunctionName
如果输入已经和指定的对象类关联的方法的名称,则用户定义的函数将覆盖现有方法。如果输入新名称,将添加到对象支持的方法列表中。
Function MySet (obj, x)
dim y
y = obj.GetROProperty("value")
Reporter.ReportEvent micDone, "previous value", y
MySet=obj.Set(x)
End Function
RegisterUserFunc "WebEdit", "Set", "MySet"
Browser("MercuryTours").Page("FindFlights").WebEdit("Country").Set "Canada"
使用UnRegisterUserFuncTOClass, MethodName可以取消用户注册方法