【扼杀QTP检查点 2】
上一篇 / 下一篇 2009-04-29 00:14:57 / 个人分类:QTP
查看( 545 ) /
评论( 4 )
【扼杀QTP检查点 2】
#u0HFH`&ck!J051Testing软件测试网#lp/]7dpDg出自 《51测试天地》第十三期 作者:卢晨之51Testing软件测试网/z"} X:D6~~
y]eV7P,L051Testing软件测试网2aW,PWM_
在做自动化脚本录制与回放过程中,只有当用户针对某个功能做的检查点,QTP才会把这个对象的预期结果做判断,给着人一种“各扫门庭雪”的感觉。或者有些地方会出现类似Http 错误之类的提示,或者页面出现某些错误但QTP却无动于衷,因为你没有对这些做监测点的设置。但这么多的对象做监测点设置是件很麻烦的事情,而你不做,却又会对项目在做验收时候看不到多大的效果。为此我们结合了上节我们的方法,就是自己编写简单的函数对这个页面做判断。
4c!^!yD fFE1R(U|e:KW0 哪么,一个web页面出现错误的情况大概都有那些?读者可以自己在脑海中想想在自己的测试工作过程中,都发现了那些类型的页面错误?结合到这点简单的提到一下几点:
_!QlZz01,标题提示错误。这个应该是给用户最直观的。“找不到页面”、“HTTP 错误”、“找不到服务器”等等;如图-01:
fI4Z(a6T8z0
51Testing软件测试网v%x|JEDC"r;k*Y
51Testing软件测试网8M+v&b2])~
1.JPG51Testing软件测试网.ta4_'b+}%['K4O
] Lt7x9y(KX-l051Testing软件测试网4B;X&Z8kH#[0yA
图(01)51Testing软件测试网dsn ZT~1G*R
51Testing软件测试网Lak'RM1^3F51Testing软件测试网l0d X)KqS
2,URL错误。它涉及到的,可以是当前页面的URL错误,或者是Frame内部的URL错误。错误的标准可以是公司内部自己提供的错误后跳转的URL,只要出现这个URL跳转出来的页面,哪么它也是错误的;如图-0251Testing软件测试网-Lhq,W4|*T t
51Testing软件测试网9^N?)b]mn7[
51Testing软件测试网mJ|xYMC/E*x
2.JPG51Testing软件测试网 JrsZq4RxJ*rDn
y[)C(~7cX1x3C051Testing软件测试网'dc)B7I5@A%IU
图(02)51Testing软件测试网B8f-Wf[CX!Jxs Ve
51Testing软件测试网Z:x*x!T._l lw JP03,页面输出错误。这点是比较泛的,区别于第2点就是某些错误的页面它是不会跳转到我们指定的URL,导致了显示出错。如图-0351Testing软件测试网X"kZT*q
^ar`.MD+I(Na0
]/p0EK.m'S3T.Pi03.JPG
51Testing软件测试网6t7l L+pH{`R1V
图 (03)
tfF5S4_5G&D*F.X}E051Testing软件测试网)R n.^)ht^#BL"_#~p:X$R+h6a)[04,WinStatusBar 的错误提示。这一点在测试的过程中,很多的测试人员或者开发人员对这个很不敏感,有些错误不易见的错误我们是可以在这个WinStatusBar中看出来的。如图-04
V,}/H*D8n w c0
51Testing软件测试网T#B3UH%M
3E?A%b/u{Y04.JPG51Testing软件测试网Z3v)i%ZtN%kd)w)s
x R-sW-c rY;d051Testing软件测试网nlY&RmEy-Q/G
图 (04)
\Jj0aq0%G\@ p1s)e`]051Testing软件测试网R$CM:s A4v zJ
就先说这4点,在看到这4点后,读者可以先试试如何把这4点写成函数。
?*x-a9Z@nn0首先,针对这个错误的比较,我们的前提是错误类型字眼的出现,为此我们先编写一个判断正则表达式的函数。
M(ACUo0v0'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
L1p%r7wB$jr0' RegExpbld 正则表达式的判断51Testing软件测试网 V6T%`R oL~9UD
'
.?RH(Ln0o:e0'参数51Testing软件测试网2Ue"tA$x,ou
' patrn 正则表达式
$mXP/G5vV2q6P0' strng 字符串
(cb}*g8@0K]0''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
t|3e(Y0B+IX051Testing软件测试网5e y KF8B,_y'V9[*t/d
Public Function RegExpbld(patrn, strng)
"s,KhF;j/Ue*J0Dim regEx, retVal ' 建立变量。51Testing软件测试网 N5H!h _0^w"Q.I
Set regEx = New RegExp ' 建立正则表达式。
-f,A2n+K1Vgy!{0regEx.Pattern = patrn ' 设置模式。51Testing软件测试网)Any'l7H5L'i
regEx.IgnoreCase = true ' 设置是否区分大小写。51Testing软件测试网h{g$`&Sn8a
retVal = regEx.Test(strng) ' 执行搜索测试。51Testing软件测试网E"n+o i9ag
RegExpbld=retVal
*ux g!\}2wBv3}0End Function
'NiXYZ5_0
tBa+G0~r)};w]0其次,第1,2,4点的函数编写实现难度不高。好比第1点中,我们只需要取出 Browser的标题,并使用上面的表达式函数便可以
.e"CK#F1UL#c0-1 RegExp = "错误|error|无法" ‘这个是我们简单编写的正则表达式
8Q.ab%L*G1gp&S0-2 title=browser("Google").getroproperty(“title”)51Testing软件测试网6YzAY5T9tbp
-3 if RegExpbld(RegExp, title) then51Testing软件测试网O0O-L'y6S0J;~
-4 '如果出现这些错误的字样则报错
&AkgxMn:_"E,YL9`d0-5 end if51Testing软件测试网EW(Y)Z3re*N0K/o
但在第2点中,需要提醒大家的是,捕获这个错误的URL,不仅仅是当前页面的URL,我们还需要取出在页面中所有frame的URL做对比。51Testing软件测试网U7\e @7d;gB4E
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'F;P&b4XkP(a&J0' 参数51Testing软件测试网(`9ot9g4F
'error_url 公司内部自定义的错误页面跳转URL,可以写成数组之类去进行比较51Testing软件测试网W_ b(H]D
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
9M$z]au0v051Testing软件测试网kZjK8KqPyz
-1 Dim FramesObj
Na%pL"kHO6rd0-2 Set FramesObj =browser("Google").Page("Google").Object.frames 51Testing软件测试网8Uh~;M!G
-3 For i=0 to FramesObj.length-1
6m;aXGm7n,gA0-4 If FramesObj (i).getroproperty("url")= error_url Then51Testing软件测试网 U|5Do9KJxvo&y:L
-5 '如果为true就是某个frame已经跳转到指定的URL
gil8U`^5`A Q0-6 End If51Testing软件测试网)gP|(X']~ k
-7 Next51Testing软件测试网 ~KrDI,`6Nq/l
51Testing软件测试网d J3~4`a m
再次,我们针对第三点,我们查错的标准是当前页面中是否出现了类似第1点中的错误字样:"错误|error|无法"。但是如何实现呢,在这里简单介绍3个方法。51Testing软件测试网/YC+{'~)K9u.WK
第一:通过QTP自带的TextUtil对象去做页面字体捕获。51Testing软件测试网u3H4S^.hU
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网:n_5b*V$D6T;yg
' QTP_DocIsLive 通过TextUtil 对象判断页面是否存在某个特定错误字样
6_v*t is~J0'
W i5aa,r`H0'参数
CQssm@D0'无51Testing软件测试网:o:vW:jjFJ@
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网:w7u!T"Lz
51Testing软件测试网 aa%o9DrYQ-v*g[
Public Function QTP_DocIsLive()
)[-bDS~ ?+G lO0Dim Src_text,patrn51Testing软件测试网K9@9o&]8A*P5T
Src_text=TextUtil.GetText(0, 20, 20, 2000, 2000) '窗口的大小需要根据实际去定义
2C)ff5pz @O0patrn="错误|error|无法"
(Cu9G*puPhc7b0If RegExpbld(patrn,Src_text) Then51Testing软件测试网+FZQ"XK5G
QTP_DocIsLive=true51Testing软件测试网2Vu_ WLo4sP
Exit Function
k[s M!y!i*A0End If51Testing软件测试网JC6CeYb&K
QTP_DocIsLive=false 51Testing软件测试网uf]0lnNu
End Function51Testing软件测试网R.D(e.N6PT{Ol
51Testing软件测试网 I*Y{0I!w$\`'V
优势:原理简单,甚至能查找到不可预知的msgbox中的内容。
GwU"{G+Q2G/A l0 弊端:QTP本身对这个TextUtil的支持并不是做得很完善,导致了方法是使用过程中,偶尔会与Window Explorer 冲突,导致了使用函数完后,Window会出现某些异常情况。51Testing软件测试网YZ:j]$b4B
pJ*u8O&^.^;Fo7gb0 第二:通过浏览器自带的查找功能。
-MB R,@ ~u'Pp0
?!Mo,~+SK6F0'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网^q9`h+|
' New_Page_Docfind 通过IE 自带查找功能判断页面是否存在某个特定错误字样51Testing软件测试网 }*]N@$A
'51Testing软件测试网C"A$ys\ |BS{?
'参数
A.XK)E H5L0' New_Page_Doc 用户自己输入的查找字样,不支持正则表达式,需要自己编写循环查找
]P1D/[+v@'\E0''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
3Q*]lD3N/Ik'wmEY0
o5jX d uS Pb"l(y.yyy0Public function New_Page_Docfind(New_Page_Doc)
kxx)ITTK0 Dim oShell
6j P0~U4u1ef0 Set Shell=CreateObject("WSCript.shell")51Testing软件测试网PE_ [hQ
oShell.sendkeys "^f" '发送”Ctrl+F”调出查找功能51Testing软件测试网w$Xx|2G_|,^M
browser("browser").Window("查找").Page("查找").WebEdit("WebEdit").Set New_Page_Doc '设置搜索文本的内容,用户需要自己添加对象或者修改成描述语言51Testing软件测试网J1x7v$k#@@%vR
browser("browser").Window("查找").Page("查找").WebButton("查找下一个(F)").Click
6BQ[bt0c Kb0'点击查找按钮
Q-t z8i8D ]0 If browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Exist Then
w.E'|X Vl h0 browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Close51Testing软件测试网0`_RN9s {"[\
wait(0.1)
'P!X2T J~$r]7B0 oShell.sendkeys "%u"51Testing软件测试网x(x-Q.[Eh\$e[
browser("browser").Window("查找").Page("查找").WebButton("查找下一个(F)").Click
R~7U M h?M0 If browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Exist Then51Testing软件测试网qT?Ir/S)J5k
browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Close
ml&o^jS0 New_Page_Docfind=false51Testing软件测试网Iq;oz O @0t'`2y'G8l
browser("browser").Window("查找").Close
&W8{+ZuQ-p"Gd H+in,G0 else51Testing软件测试网]1f9iyg
New_Page_Docfind=true51Testing软件测试网)Le:X(kU @
browser("browser").Window("查找").Close
/Q2y:yD(Pt%C+qr0 end if
nH0s(j5f0 else
y%g:dZ(b;]9gF0 New_Page_Docfind=true51Testing软件测试网@,y0^)w-X j/V:FG
browser("browser").Window("查找").Close
,qX[|#Gu8Jb+z b0 End If