*dl%~~%@
FZ5O01. QTP 识别对象原理51Testing软件测试网zNezX{h
y}:p6xP.Kdf%t
`0QTP对每个控件类都定义了一些强制属性和辅助属性。当qtp对对象进行识别的时候,首先qtp会取出控件的所有强制属性,如果这些强制属性能够唯一标识这个控件则选强制属性来标识控件,如不能唯一标识控件,qtp则逐一取出控件类的辅助属性直到能唯一标识控件为止。
P8z"]&z Y.I0%Yx#GB5~0如果使用强制属性和辅助属性还不能唯一标识控件。 则有以下两种可能:51Testing软件测试网c] JPevc3s
51Testing软件测试网+S'`'t]C5y`;KrQTP对控件类的识别使用了智能识别(Smart Identification),qtp会忽略之前对强制属性与辅助属性的识别,这时qtp会使用smart identification 中的 basic filter properties和optional filter properties来对对象进行识别. basic filter properties就是一些控件的基础属性,例如button的Name,这个属性变了button也就变成另外一个button了。51Testing软件测试网:z
rT_F G"^l
?
4apU|1{ {y?@m7S0如果对控件类的识别没有使用Smart Identification,系统会使用Ordinal Identifier来对控件进行识别。
q wd0n){(X:@051Testing软件测试网1LUU$BNd4Kz2. QTP的测试流程。大多自动化测试工具都是使用录制回放这种方式:51Testing软件测试网8b*v~~f2{z(C~
fY
[;CSY%ky,On0录制:QTP录制方式有三种,标准录制,模拟录制与低级录制。
-P
vK*UhI4};g051Testing软件测试网/i2_*l~;vS@]A标准录制一般就是最常用的,录制对标准控件的一些操作,如对button的click,winEdit的Set value等等。51Testing软件测试网&uLS(]3}9^~F
kx"oH:c;N0模拟录制,可以录制鼠标的轨迹,主要用与绘图此类软件的录制。51Testing软件测试网s/HXh wi
51Testing软件测试网-vH-`7F4t8Yxz@0x低级录制,与标准录制不同,不是Object.Operation value 而是记录屏幕坐标点上的操作。 稳定性较差。
7cd+Z!N[051Testing软件测试网"{aQ]@;I录制的时候,QTP会将用户的操作以VBscrīpt的形式保存在Expert View里头,录制的时候还会判断控件是否存在对象库里面,如果没有则创建对象。对象库里面的对象称为 Test Object 与程序UI上的控件对象Run Time Object 相对应。
G&uR-opD051Testing软件测试网n*S/r6W?f-Co和TO、RO相关的几个函数有:
*t&QpNvJ+k-W051Testing软件测试网8Y9L[S!qZ
GetTOProperty():取得仓库对象的某个属性的值51Testing软件测试网_9s LYx7\9F9j9m:oo
GetTOProperties():取得仓库对象的所有属性的值 //返回一个对象类型,属性集为对象标识属性集
Z-|PI6_0SetTOProperty():设置仓库对象的某个属性的值
M6@)lMZ"?l.g0GetROProperty():取得实际对象的某个属性的值
%~j0sk*A.s051Testing软件测试网vqPkj`;c)I8O
|9TL7d3`~a:K0录制完成需要对代码进行修改,增加代码的稳定性与可移植性。51Testing软件测试网5z
Lc*@0Cp[x&nA;U
-_%x/Kk$X4j6G01. Add Comments. 代码中加必要的解释能增加代码的可读性,利于回归测试中代码的维护。
tWPUg\0.Dv;dd+t:P02. 增加控制流语句。如程序的登陆,正常流程是输入验证信息,点击登陆按钮进入主界面。若用户已经登陆则系统就应该弹出一个确认框问用户是否需要删除原来的session。 这是录制的教本里面我们就应该加一个判断, 判断是否这个弹出框存在。51Testing软件测试网)g},p_9Y
_H^Z!azU.}O03. 参数化。 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).
{1E:CY8E
?0b@vY{Fm xV04. CheckPoint.51Testing软件测试网8l`L,U
v;k$T'q
oe;I(J
Y:AO05. 同步点. WaitProperty(Property, value, Timeout). Object.exist(Timeout). Wait Time.
&vP"i8qD!kGDf(h'Q0Vp+P
d'd
Cd8s06. QTP错误处理机制:51Testing软件测试网9?u*[B.X+lq%aiq
4I.\3c3\$?0QTP 有三种错误处理机制:
)Z ` y*b uow
d.x7KQ051Testing软件测试网b }QN;F/V6`TP*}Y1, 全局错误响应: Test setting中run设置51Testing软件测试网.a0G+hw[pI
51Testing软件测试网Lo8^![ O(q全局错误响应是qtp的系统缺省错误处理,当没有使用其他错误处理方式时,系统会自动调用这里指定的方式进行错误处理。51Testing软件测试网o#o
n.E"I"|oG?
"Cv;oC$e!vup0在整个脚本有效。 若是出错在Function Library,则错误号只存在library,不会传到Action中。
(KU/fV8S*`051Testing软件测试网fd Vk
{J3lz'An$a8N2, VBscrīpt on Error错误处理: On Error Resume Next
V'qg+L4e;N051Testing软件测试网L&aI,~n'U\VBscrīpt的错误处理方式,三种相关方式为:51Testing软件测试网
{&QV(yV(FO_
51Testing软件测试网 fXu#k7^C:y'hra)On Error Resume Next: 一旦这个语句已经被处理,脚本将继续后面的程序,不理会已经出现的错误。51Testing软件测试网C!?d]pH4@
H3xS#RFt9E0b)On Error GoTo 0: 使用On Error GoTo 0语句恢复缺省的错误处理行为, 在运行这个语句后, 发生的运行期错误将导致缺省错误处理,在qtp中,缺省的出错处理就是全局错误响应。
v#v
Z#Wk{v0I_#a+OU!`
M0c)Err对象: Err对象有三个属性 Number, Source, Descrīption. Err对象在运行时错误发生的时候赋予新的值,原来的值将被丢弃。 Err对象是全局的, 不受函数调用的影响。 Err对象可以使用clear方法清空。 任何时候使用On Error Resume Next或者On Error GoTo 0都会清空Err对象。51Testing软件测试网sp0g~(u A-sG
m$T4gf4ZM0只对语句所在的函数或Action中该语句之后的代码生效,对于子函数,调用Action均无效。若On Error 语句存在Action中而出错在Function Library则系统会调用全局错误响应处理。若是Action中函数调用,则会返回到使用On Error 语句的环境中。51Testing软件测试网EU@f6s@#J
51Testing软件测试网0i*P_)S*v3, 错误恢复场景: Recovery Scenario.
H!K+uew3C0!y.eN ?A
L{&Z0触发条件有:51Testing软件测试网/\?9c-|Mk,p
51Testing软件测试网;N4CSp4m$C
n5{a) Pop-up Window51Testing软件测试网
d7l9oHN ar?
i0e|"ic6Wh0b) Object state51Testing软件测试网~aNQ8})zS
51Testing软件测试网
]8V#yX+]:y_+Ly#uc) Test run error.51Testing软件测试网0b!v$a!m`v
51Testing软件测试网+vz
B5k6J%Wd) Application Crash.
RB'~,Ai*i051Testing软件测试网y1gXifsje错误恢复有以下几种方式:
_&U7o%r%|'^{051Testing软件测试网1~ b_WrAf:K)r%da) Keyboard or mouse operation51Testing软件测试网b$M])@ Y\q
51Testing软件测试网;]5h6~zG&W9n2Qkb) Close Application process51Testing软件测试网/a6]m7K^
51Testing软件测试网P\:k1J1m3_$Wc) Function Call51Testing软件测试网7kv}0z`ucCi
|h+m[
|gV y4DL0d) Restart Microsoft Windows51Testing软件测试网L3RPO8MS}
b
51Testing软件测试网-[ ~[,MUh#c7. 关于虚拟对象的使用:
)[rabR#rq06A$^
]R)qjY'@s0虚拟对象管理器中显示的虚拟对象集合存储在您的计算机中,而不是随包含虚拟对象步骤的测试或组件存储。这意味着如果您在测试或组件步骤中使用虚拟对象,则仅当在包含正确的虚拟对象定义的计算机中运行时,该对象在运行会话过程中才能被识别。要将您的虚拟对象集合定义复制到另一个计算机,请将您的 <QuickTest 安装文件夹>\dat\VoTemplate 文件夹的内容(或该文件夹中的单个.vot集合文件)复制到目标计算机上的相同文件夹中
!QB9d3d7kfD-q051Testing软件测试网K)wf e1f <QuickTest 安装文件夹>\dat\VoTemplate 文件夹只有在已经定义虚拟对象的情况下才会出项
6~/}#T3M1v-oO `7_Y051Testing软件测试网#K
Zax/fu9U8. 使用RegisterUserFunc注册用户定义的测试对象方法51Testing软件测试网J jH3C#S gej
rOB,HM;A)\!~B \m0RegisterUserFuncTOClass, MethodName, FunctionName
r3[F-S+`1S:DW051Testing软件测试网IC
|qJ5nK E如果输入已经和指定的对象类关联的方法的名称,则用户定义的函数将覆盖现有方法。如果输入新名称,将添加到对象支持的方法列表中。51Testing软件测试网Q:J.}
I(TI V7R&h
9XL-_E+^T(r%t0Function MySet (obj, x)
*wl aVJv?L\0dim y51Testing软件测试网_WJ2E&IzR+q:^j
y = obj.GetROProperty("value")51Testing软件测试网3}tF5z4C:i8Aw
Reporter.ReportEvent micDone, "previous value", y51Testing软件测试网7SY!r0quO4[
MySet=obj.Set(x)
%h^9ZZBd.Y!iET0End Function51Testing软件测试网PP0F^ H6nvg
RegisterUserFunc "WebEdit", "Set", "MySet"
H,]$Av8x0Browser("MercuryTours").Page("FindFlights").WebEdit("Country").Set "Canada"51Testing软件测试网9]W
T%g{Z'C"V
使用UnRegisterUserFuncTOClass, MethodName可以取消用户注册方法
*v2k N%aV9b1I"N09, QTP描述性编程:51Testing软件测试网c]{3kT0u I
平行于对象库的一种编程方法. Example:
`qnK)gn_0set EditDesc = Descrīption.Create()51Testing软件测试网-{FZ
O4dp%?9M
EditDesc("Name").Value = "userName"
}"T}&Gt0EditDesc("Index").Value = "0"
J'{}2dQ0Cg
z6x0Browser("Welcome: Mercury").Page("Welcome: Mercury").WebEdit(EditDesc).Set "MyName"51Testing软件测试网:Y
e _D.d~L
使用描述性编程加正值表达式对于那些测试对象经常动态变化的情况很有用, Example:
-H2?0FtgE-`o;q0Dim strTemp
NnP/v;[9l0strTemp = "Google.*"
&Wwb d
Da0Browser("百度一下,你就知道").Page("Google").WebEdit("q").Set "abc"51Testing软件测试网v7WP*uJ
Browser("百度一下,你就知道").Page("Google").WebButton("Name:="&strTemp).Click
^j F
?y9s010, 巧用WebTable的ChildItem方法: Example
1O1i{r4c)X{S0Set ōbjTable = Browser("hao123网址之家--文学小说").Page("hao123网址之家--文学小说").WebTable("起点中文网")51Testing软件测试网y$M1q|:Sf
intRow = 2
2qBg6mf|L#th0intCol = 251Testing软件测试网!b;W.S2s2P;t"QW;|
' 通过ChildItem获取单元格中的链接对象
.Zl5eK[x
AlI0Set ōbjLink = objTable.ChildItem(intRow, intCol, "Link" , 0)
p^1vC4dm]5?4?
]0' 单击链接
9L7g5p"iT!P1w
w2Q(Y0objLink.click51Testing软件测试网\*L}}$O5rX
Q
T!d!yEx"wxy:A0