【扼杀QTP检查点 2】
上一篇 / 下一篇 2009-04-29 00:14:57 / 个人分类:QTP
查看( 547 ) /
评论( 4 )
【扼杀QTP检查点 2】
L"O?:_It0jiW051Testing软件测试网 uV7e8wy出自 《51测试天地》第十三期 作者:卢晨之51Testing软件测试网NMl-W+O1_&|E"y
qD [*K4v051Testing软件测试网/C$r_*]/^7V'`CG
在做自动化脚本录制与回放过程中,只有当用户针对某个功能做的检查点,QTP才会把这个对象的预期结果做判断,给着人一种“各扫门庭雪”的感觉。或者有些地方会出现类似Http 错误之类的提示,或者页面出现某些错误但QTP却无动于衷,因为你没有对这些做监测点的设置。但这么多的对象做监测点设置是件很麻烦的事情,而你不做,却又会对项目在做验收时候看不到多大的效果。为此我们结合了上节我们的方法,就是自己编写简单的函数对这个页面做判断。51Testing软件测试网.{9P)Lp#W;r,M A
哪么,一个web页面出现错误的情况大概都有那些?读者可以自己在脑海中想想在自己的测试工作过程中,都发现了那些类型的页面错误?结合到这点简单的提到一下几点:
Dm9m+U"j'dC01,标题提示错误。这个应该是给用户最直观的。“找不到页面”、“HTTP 错误”、“找不到服务器”等等;如图-01:51Testing软件测试网lCry3}y2R
51Testing软件测试网?_]4Y(~Ty+P}2~ B
DKC?wb+a?"B#S01.JPG51Testing软件测试网 e&B
hD!WV)`#[6Z
F@W W"PNT^051Testing软件测试网@1P.u.JmRu-G)i
图(01)
6iA$m2R,[B3~0Ew d,tY:w`051Testing软件测试网2v/cLd)th4u!t(C
2,URL错误。它涉及到的,可以是当前页面的URL错误,或者是Frame内部的URL错误。错误的标准可以是公司内部自己提供的错误后跳转的URL,只要出现这个URL跳转出来的页面,哪么它也是错误的;如图-02
fF/viBs9? |0
,{Y/oZ1D0EG B0
:QWN@b02.JPG
xRD6|6s?jq#D0
图(02)51Testing软件测试网X)EN c,M7H u i0J
u,ca*M:Z+g ~4u051Testing软件测试网N8t%T,vS%c3H q D
3,页面输出错误。这点是比较泛的,区别于第2点就是某些错误的页面它是不会跳转到我们指定的URL,导致了显示出错。如图-03
B;o;m}7K7G%I T?0
N/y#S3J B5JJQ){
Ff1e051Testing软件测试网u%nY_d;AP,D
3.JPG51Testing软件测试网!s9er8W"uFg
8i6i(L7idRJDa0
图 (03)
s {Gy[} g|051Testing软件测试网(] E)v?e v/tc7Z{a)? W6F1`u*~8h!p3s;p&z04,WinStatusBar 的错误提示。这一点在测试的过程中,很多的测试人员或者开发人员对这个很不敏感,有些错误不易见的错误我们是可以在这个WinStatusBar中看出来的。如图-04
']9n*oY8m4Vj8S(We0
51Testing软件测试网3EV0RL'd,B
g1E/?;lI04.JPG51Testing软件测试网5t'q!G$UBnp
51Testing软件测试网bNj5[ u o9]s$V
图 (04)51Testing软件测试网0mjH0I5^T7y5H
#j,Lh}iXI r1v0
/u'dthA*m1t0就先说这4点,在看到这4点后,读者可以先试试如何把这4点写成函数。51Testing软件测试网 H7|7XC1D4fh,E
首先,针对这个错误的比较,我们的前提是错误类型字眼的出现,为此我们先编写一个判断正则表达式的函数。51Testing软件测试网^jqX%q3x*a
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|5n b-bb0F0' RegExpbld 正则表达式的判断
0[:A kyX_0'
_m&N:K$L$w\ Q0'参数51Testing软件测试网R P%r4T}K8pXb
' patrn 正则表达式51Testing软件测试网E+~]QbHw
' strng 字符串51Testing软件测试网`+G fgG
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网;S5C5f2|R:[s
,L(bg"zL4M0Public Function RegExpbld(patrn, strng)51Testing软件测试网 W G[WP2~A*Z
Dim regEx, retVal ' 建立变量。51Testing软件测试网'Xh'W1__'P
Set regEx = New RegExp ' 建立正则表达式。51Testing软件测试网 |SzT.y$[*xG
regEx.Pattern = patrn ' 设置模式。51Testing软件测试网"A6US5Uc1q
regEx.IgnoreCase = true ' 设置是否区分大小写。51Testing软件测试网$D@b8C4sOZE
retVal = regEx.Test(strng) ' 执行搜索测试。
8AT Xl8P,WF0 RegExpbld=retVal51Testing软件测试网T.O$Q r,A"p0W&f
End Function
2M+g+T9~p|6y051Testing软件测试网;OBj;d-A1vK$N5[ PP
其次,第1,2,4点的函数编写实现难度不高。好比第1点中,我们只需要取出 Browser的标题,并使用上面的表达式函数便可以51Testing软件测试网P2mW%j{C5M,[
-1 RegExp = "错误|error|无法" ‘这个是我们简单编写的正则表达式
a~N-?P9s`0-2 title=browser("Google").getroproperty(“title”)51Testing软件测试网$R'w:g1lG
-3 if RegExpbld(RegExp, title) then51Testing软件测试网:_](?(Z8eV2y6m
-4 '如果出现这些错误的字样则报错51Testing软件测试网R F\~ [&WSV l
-5 end if
9Xa!Q})_0但在第2点中,需要提醒大家的是,捕获这个错误的URL,不仅仅是当前页面的URL,我们还需要取出在页面中所有frame的URL做对比。
&\:q K@ n$PmZ9K9@0'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
_7Q@b6?dI0' 参数51Testing软件测试网3|4KU4|rT8s
'error_url 公司内部自定义的错误页面跳转URL,可以写成数组之类去进行比较51Testing软件测试网4x4d4}zgx
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网` a|%o,d9r
51Testing软件测试网{mB]&nY9W1n8w
-1 Dim FramesObj
3W"H*T%r{0-2 Set FramesObj =browser("Google").Page("Google").Object.frames 51Testing软件测试网 _f#m ~RHN7QKi
-3 For i=0 to FramesObj.length-1
v kJ ]wx+Q0-4 If FramesObj (i).getroproperty("url")= error_url Then
vfe)]WLbx8uRS0-5 '如果为true就是某个frame已经跳转到指定的URL
?1d5Wj4]$dPG0-6 End If51Testing软件测试网khWi:[Q
-7 Next
1L1lJ ?"fR0X S ?2@0
ti2c,j&g4_{*J:J0再次,我们针对第三点,我们查错的标准是当前页面中是否出现了类似第1点中的错误字样:"错误|error|无法"。但是如何实现呢,在这里简单介绍3个方法。51Testing软件测试网 TxPW&X#}xL/`%s-b
第一:通过QTP自带的TextUtil对象去做页面字体捕获。51Testing软件测试网 Bp:n@*gtIF&N
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网h*]%p)\9YD.V@
' QTP_DocIsLive 通过TextUtil 对象判断页面是否存在某个特定错误字样
G f h.L$[P,{0'
4GK`&iq!Q)@MX'u0'参数
R{:JX+nQ,sG3u0'无
_;k B.h|6i'jM0''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网:^z"qp:u9bZ7@D
N%UQgo5O/r]&B0Public Function QTP_DocIsLive()
jWRJ\x4Gi0Dim Src_text,patrn51Testing软件测试网+S:Qw3t$O,|r|x
Src_text=TextUtil.GetText(0, 20, 20, 2000, 2000) '窗口的大小需要根据实际去定义51Testing软件测试网_3i)H%eo%m^ D
patrn="错误|error|无法"
0K.Yk]~7yu-z \0If RegExpbld(patrn,Src_text) Then
.j Zz$q#D$R)t2Ap%j0QTP_DocIsLive=true
M;M%B$u3d LJ0 Exit Function
9QnL7?R7k,j+Y^'X0End If
~j;V U'kc^1w0QTP_DocIsLive=false 51Testing软件测试网%uYK*t@4w'@
End Function51Testing软件测试网;d(u(D,Vi8I
m!w|m$G%A5e7J/T*l%e0 优势:原理简单,甚至能查找到不可预知的msgbox中的内容。51Testing软件测试网*o'p(vc5y/Y1a0T3z
弊端:QTP本身对这个TextUtil的支持并不是做得很完善,导致了方法是使用过程中,偶尔会与Window Explorer 冲突,导致了使用函数完后,Window会出现某些异常情况。
MP`0x+ew0
$D"C `'f eo0 第二:通过浏览器自带的查找功能。
5m+XP0kA.m3FQ0
e\lCMhE7E5Ye#Bk0'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网@ N;HD&x)J
' New_Page_Docfind 通过IE 自带查找功能判断页面是否存在某个特定错误字样
~$]2LyLXEt0'51Testing软件测试网%vH$T)[ VM-_8J5KC
'参数
2{#Q/GIp)v0' New_Page_Doc 用户自己输入的查找字样,不支持正则表达式,需要自己编写循环查找
o5_;{!|!rk,e0''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
rq]tR0n+b2] nKE051Testing软件测试网3L"C/AEO(^q
Public function New_Page_Docfind(New_Page_Doc)
B%mE/GK]e4`0 Dim oShell
T-p ~0VD)c4` p0 Set Shell=CreateObject("WSCript.shell")
m@h P$CIbQ'b+Y0 oShell.sendkeys "^f" '发送”Ctrl+F”调出查找功能
TmT@X LQ0 browser("browser").Window("查找").Page("查找").WebEdit("WebEdit").Set New_Page_Doc '设置搜索文本的内容,用户需要自己添加对象或者修改成描述语言
%vr*P,N [e"i|0 browser("browser").Window("查找").Page("查找").WebButton("查找下一个(F)").Click51Testing软件测试网4[G#E-v/c$NWB
'点击查找按钮
kT:x^l&@H0 If browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Exist Then
7C/yy!lE;TL[#b| H4C0 browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Close51Testing软件测试网_/\;T6[?0jR
wait(0.1)
S#D&\eOR6S] B0 oShell.sendkeys "%u"
1Cl4lfm ~U8z0 browser("browser").Window("查找").Page("查找").WebButton("查找下一个(F)").Click51Testing软件测试网ah%z{/}w g+A
If browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Exist Then51Testing软件测试网0MH.Wj9I PZF*O
browser("browser").Window("查找").Dialog("Microsoft Internet Explorer").Close51Testing软件测试网2\YMu-~o2eU
New_Page_Docfind=false51Testing软件测试网7asc(Y0i0OO
browser("browser").Window("查找").Close51Testing软件测试网-@(L@1] |
else51Testing软件测试网$R+Yc"Q5Y4c5CUx
New_Page_Docfind=true
9Y^\!@V(b/n(}9X0 browser("browser").Window("查找").Close
0j-^ fe0q sfa0 end if51Testing软件测试网+X)O"k%p:Q8D
else
2f]6m3awC.SP|&{c0 New_Page_Docfind=true
3q'O~oQ~)f0 browser("browser").Window("查找").Close
BA1m/B(`?!K0 End If
~2c8_,J^W0 Set Shell=Nothing51Testing软件测试网)bG9ro3GC\1Ya+u8@
End Function51Testing软件测试网I r$r:jOR
*au c_-~0优势:针对某个特定字眼查找速度快,准
Wk)x*J5r"_0 51Testing软件测试网,p GE+H0H$s]s
弊端:如果特定字眼多,会导致速度下降,界面闪动较为厉害
!yX)r*@]j;C0 函数中的某些对象是建立在对象库的基础上的,移植效果差强人意。51Testing软件测试网 XZ%O t1W1|R9~O _
不能同时对多个Frames做查找,需要点击触发
sQ R8ch Za G051Testing软件测试网%wR'j!`*?F:q5D
第三:使用DocumentElement 对象。
!ElTa5e*m,Y(N+x051Testing软件测试网 Hi!^.G"u xp.Z
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Ryo*?c0' New_Page_DocExist 使用DocumentElement 对象判断页面是否存在某个特定错误字样51Testing软件测试网5W:yn deM7{
'
j9a7K}_ _ V d0'参数
O]3I7[d$Oq&`x+D{0' reg 正则表达式
0j9bZ Ad2ZQ0''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
r5v!Cm~u%pB0Public Function New_Page_DocExist(reg)51Testing软件测试网Ab&fzc)Vc
Dim Page_doc_a,Page_doc_b,Page_doc_c,str,oDesc,frame_obj,logie,child_a51Testing软件测试网6V:@H7F5e4g?g({'l
str=browser("browser").GetROProperty("title")51Testing软件测试网"yK%q9z/n[[b
If browser("browser").page("index:=0").Exist Then
gFm6g k%e;RbZdq0 Set Page_doc_a=browser("browser").page("index:=0").Object.documentElement.all.tags("body")51Testing软件测试网)g Y7H7Fd |/qF6AEK
For each Element in Page_doc_a51Testing软件测试网)W#R| G^
str=str+" "+Element.outertext51Testing软件测试网.[!Qi _w*\dw
Next51Testing软件测试网g'_s0_`
Set Page_doc_b=browser("browser").page("index:=0").Object.documentElement.all.tags("input")
Dl;T]c#Y:g6|N*j1SO0 For each Element in Page_doc_b51Testing软件测试网0i uZa#L
str=str+" "+Element.value51Testing软件测试网y d;a5e6Ri
Next
*` f4z_~@0 Set Page_doc_c=browser("browser").Page("index:=0").Object.documentElement.all.tags("SPAN")51Testing软件测试网H4z,rDm!R@'tNX
For each Element in Page_doc_c51Testing软件测试网4Z_%Uj$B"s.~ {x
str=str+" "+Element.outertext
d C4appI(\0 Next51Testing软件测试网V'\ z!d'c
Set Page_doc_a=nothing51Testing软件测试网 Y8q,V0d;}-IP(S
Set Page_doc_b=Nothing
@wJ T:A SBe0 Set Page_doc_c=nothing51Testing软件测试网@V[jo%B o"D
End if51Testing软件测试网-L^Ha^ Z
K]#_hugf0^0 frame_count=browser("browser").page("index:=0").object.frames.length
2T P4i;l.N0 If frame_count<>0 Then51Testing软件测试网E!q;l [+f-p
Set Desc = Description.Create()51Testing软件测试网I.N'p!k"D2V7a*M
oDesc("html tag").Value = "iframe"
#aFCJ/mgr2w0 set frame_obj = browser("browser").page("index:=0").ChildObjects(oDesc)
a!xAzErE0 For i=0 to frame_count-1
kQ_*zG&L,k9j0 set Page_doc_a=frame_obj(i).Object.documentElement.all.tags("body")51Testing软件测试网|eN kQvW gF
For each Element in Page_doc_a
$OlM S5U%HC3S0 str=str+" "+Element.outertext51Testing软件测试网rJ{_ o!c2R
next51Testing软件测试网:y!}(c!c:z_L{d8y
set Page_doc_b=frame_obj(i).Object.documentElement.all.tags("input")
p E.\XC7D4GV0 For each Element in Page_doc_b51Testing软件测试网5uM^\ISI
str=str+" "+Element.value51Testing软件测试网rc+{,r9wR,G1VB
Next51Testing软件测试网 UULF4oQ
set Page_doc_c=frame_obj(i).Object.documentElement.all.tags("SPAN")51Testing软件测试网 bt1T W%FY'RX`H
For each Element in Page_doc_c51Testing软件测试网G"~_-J"V+K%H;K{
str=str+" "+Element.outertext51Testing软件测试网8uX.i L#P`h
next51Testing软件测试网Vt/J:UH/ud{8m|
set Page_doc_a=nothing51Testing软件测试网/PE`*D\1LQ
set Page_doc_b=Nothing51Testing软件测试网~CvLN
set Page_doc_c=nothing
)aI9gq Y Y_X9P0 Next
)Q}K(Rxdr l0 End If
OCyLnt*l6m:g0 str=str+" "+browser("browser").WinStatusBar("msctls_statusbar32").getroproperty("text") ' WinStatusBar的对象需要自己添加进对象库
#|o'J'm)x.J0 New_Page_DocExist=RegExpbld (reg,str)
-X:a*zI2sP0End Function
uh q4HPSatvV051Testing软件测试网A:T3x8T&sg%t
优势: 方法编写能把标题捕获,状态栏捕获也加进去
U!JU)R E/]i0 捕获的字样比较全面,较为准确
0fn8Ajcr\2GFF0 可移植强
o4\ y;{5pMHO051Testing软件测试网u Dy_H)f kpA&I6z
弊端: 使用正则表达式做判断时候时间较长。
u8B2]/[^0
4^7E^;`l,k8e X0 看完这3个方法后,可能有人会有疑问,那究竟这样真的能够抓到错误吗?在这里,我们只需要再编写多一个截图的功能,并且在跑动脚本过程中只要出现我们定义的“错误”就截图,为的是宁杀错,不放过的精神。值得一提的是,这查找“错误”的方法也适合测试人员在做翻译查找中。因为许多的多语言版本的软件,在翻译方面或者会有漏网之鱼。51Testing软件测试网oEIV6J$GO ~?7w#e|
LA3K,_,k*jGS/Z0[本帖最后由 假装不在 于 2009-4-29 00:13 编辑]51Testing软件测试网5Bf!NHv
51Testing软件测试网vXA+yMna2\7W
51Testing软件测试网'h&uT'aqR
本文收录于《51测试天地》电子杂志第十三期。51Testing软件测试网)bQ+k+MUk4hN
51Testing软件测试网2~-mJ%@2mN\'Yt2\版权声明:本文出自51Testing软件测试网电子杂志——《51测试天地》第十三期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
zIrOQp m/hr051Testing软件测试网Rc|!H'E%y-P YTAG:
- 假装不在 发布于2009-04-29 01:04:02
-
晚上逛了jifeng的博客发现了createTextRange 这个方法,在速度上比第三步中运行速度要快很多。
8}z(d)K6m0aMTB*|n,~软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具大家可以学习学习。所以第三个方法可以做下简单的修改,然速度提高。同时第3个方法修改时候,需要注意2点51Testing软件测试网Q1`,X IU,GR
1、不过这个方法的使用在对按钮的VALUE没有做捕获功能,同样需要再写。51Testing软件测试网v4ys!T
R
~%X$c5G
2、createTextRange的方法同样在使用过程中需要对frame做个遍历,如果只设置当前的page.object.body会抓不到frame内部的东西(可以玩玩163)
zW(Z Wy"Xl|O软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具@1r~P~
AYL
学习永无止尽... 中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务8LO w;QkkHV%V
低调发帖,华丽路过。
- 假装不在 发布于2009-04-29 01:05:31
-
季风的博客是:
&WZ5CP/shttp://www.51testing.com/?92935
+V I!Mu\N'WS]~`YH中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务大家去踩踩有用的东西。 E#R_4`{|u1I)_&cV
www.51testing.com:q8l9p9G8g+HpL_
低调发帖,华丽路过。
- zte_boy 发布于2009-04-29 11:23:09
-
打广告呢?哈哈
- 假装不在 发布于2009-04-29 14:46:03
-
QUOTE:
原帖由 zte_boy 于 2009-4-29 11:23 发表 软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 - 自动化测试工具xd[;j;T?
中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务/`!Yq)j(t)`P
打广告呢?哈哈
软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 - 自动化测试工具r2wqNg
51Testing软件测试网-f9Nu ?){y6w(^g)u
不是,这叫友情链接。
标题搜索
日历
|
|||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
1 | 2 | 3 | 4 | 5 | 6 | ||||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 |
我的存档
数据统计
- 访问量: 41084
- 日志数: 43
- 图片数: 2
- 建立时间: 2008-03-19
- 更新时间: 2010-04-05