原创日志转载请标明出处与连接! 大家的支持是我的动力!_______卢晨之 (luchenzhi@21cn.com/@hotmail.com)

【扼杀QTP检查点 2】

上一篇 / 下一篇  2009-04-29 00:14:57 / 个人分类:QTP

查看( 545 ) / 评论( 4 )

【扼杀QTP检查点 2】

#u0HFH`&ck!J051Testing软件测试网#lp/]7d pDg

出自 《51测试天地》第十三期 作者:卢晨之51Testing软件测试网/z"} X:D6~~


y]eV7P,L051Testing软件测试网2aW,PWM_
    在做自动化脚本录制与回放过程中,只有当用户针对某个功能做的检查点,QTP才会把这个对象的预期结果做判断,给着人一种“各扫门庭雪”的感觉。或者有些地方会出现类似Http 错误之类的提示,或者页面出现某些错误但QTP却无动于衷,因为你没有对这些做监测点的设置。但这么多的对象做监测点设置是件很麻烦的事情,而你不做,却又会对项目在做验收时候看不到多大的效果。为此我们结合了上节我们的方法,就是自己编写简单的函数对这个页面做判断。
4c!^!yD fFE1R(U|e:KW0     哪么,一个web页面出现错误的情况大概都有那些?读者可以自己在脑海中想想在自己的测试工作过程中,都发现了那些类型的页面错误?结合到这点简单的提到一下几点:
_!Q lZz01,标题提示错误。这个应该是给用户最直观的。“找不到页面”、“HTTP 错误”、“找不到服务器”等等;如图-01:
fI4Z(a6T8z0

51Testing软件测试网v%x|J EDC"r;k*Y
51Testing软件测试网8M+v&b2])~
1.JPG
51Testing软件测试网.ta4_'b+}%['K4O


] Lt7x9y(KX-l051Testing软件测试网4B;X&Z8kH#[0yA

图(01)51Testing软件测试网 dsn ZT ~1G*R

51Testing软件测试网Lak'R M1^3F
51Testing软件测试网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.JPG
51Testing软件测试网JrsZq4RxJ*rDn


y[)C(~7cX1x3C051Testing软件测试网'd c)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

6h4_5oE`051Testing软件测试网,y(^pA,f m
51Testing软件测试网6t7l L+pH{` R1V

图 (03)

tfF5S4_5G&D*F.X}E051Testing软件测试网)R n.^)ht^#B

L"_#~p:X$R+h6a)[04,WinStatusBar 的错误提示。这一点在测试的过程中,很多的测试人员或者开发人员对这个很不敏感,有些错误不易见的错误我们是可以在这个WinStatusBar中看出来的。如图-04
V,}/H*D8n w c0

51Testing软件测试网T#B3UH%M

3E ?A%b/u {Y04.JPG
51Testing软件测试网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$j r0' RegExpbld 正则表达式的判断51Testing软件测试网 V6T%`R oL~9UD
'
.?RH(Ln0o:e0'参数51Testing软件测试网2Ue"tA$x,o u
' 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/U e*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
*uxg!\}2wBv3}0End Function
'NiX YZ5_0
tB a+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"kHO6r d0-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()
)[-bD S~ ?+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软件测试网JC6Ce Yb&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,~+S K6F0'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''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
6jP0~ 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 Mh?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;ozO @0t'`2y'G8l
                                browser("browser").Window("查找").Close
&W8{+ZuQ-p"Gd H+in,G0                                else51Testing软件测试网]1f9iyg
                                New_Page_Docfind=true51Testing软件测试网)L e:X(k U @
                                browser("browser").Window("查找").Close
/Q2y:yD(Pt%C+qr0                        end if
nH0s(j5f0     else
y%g:d Z(b;]9gF0                        New_Page_Docfind=true51Testing软件测试网@,y0^)w-X j/V:FG
                        browser("browser").Window("查找").Close
,qX[ |#Gu8Jb+zb0        End If
G+a`v Y @ jr0        Set Shell=Nothing51Testing软件测试网+jl+yE y%v
End Function
Y \\(b`0
8Ce)|)N)bt ~o/|n3[0优势:针对某个特定字眼查找速度快,准51Testing软件测试网`;W-~~t$D,Z
      51Testing软件测试网$?c Rw YX0])~
弊端:如果特定字眼多,会导致速度下降,界面闪动较为厉害51Testing软件测试网3ornM1?:{4Xht'm
      函数中的某些对象是建立在对象库的基础上的,移植效果差强人意。
jo2Zq"B*l0      不能同时对多个Frames做查找,需要点击触发51Testing软件测试网O;I![4xh/dU

-E`?$}W!M q)B J0第三:使用DocumentElement 对象。51Testing软件测试网C{i#c/aU*FT
51Testing软件测试网~(Hw:y d|
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
0o:k9W3cI^`0' New_Page_DocExist 使用DocumentElement 对象判断页面是否存在某个特定错误字样
? @%OOw0X#Dk0'51Testing软件测试网2R7Lw8G ?rOp5e v'f
'参数51Testing软件测试网-?\-x]^2Z5y{
' reg    正则表达式
6G'yx,f7N#da0''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''51Testing软件测试网 nb6iR `-~]7YZ
Public Function New_Page_DocExist(reg)51Testing软件测试网L[,z0` r
Dim Page_doc_a,Page_doc_b,Page_doc_c,str,oDesc,frame_obj,logie,child_a51Testing软件测试网%E n@6}~Q
          str=browser("browser").GetROProperty("title")51Testing软件测试网jJW:bZ4j%H
          If browser("browser").page("index:=0").Exist Then51Testing软件测试网 W5},q%YTdp
                          Set Page_doc_a=browser("browser").page("index:=0").Object.documentElement.all.tags("body")
%@p?KK&E3W SS0                        For each Element in Page_doc_a51Testing软件测试网 k"~#`"f UTu4l
                                str=str+"  "+Element.outertext
)`N#QxDG0                        Next51Testing软件测试网%nf&V VO3w-?/j,G
                        Set Page_doc_b=browser("browser").page("index:=0").Object.documentElement.all.tags("input")
-X _wI RIZ0                        For each Element in Page_doc_b51Testing软件测试网1c9S"mc~|JA
                                str=str+"  "+Element.value51Testing软件测试网.fZ9B:b^-t1Uc
                        Next
"R"ypB5L|W(_0                        Set Page_doc_c=browser("browser").Page("index:=0").Object.documentElement.all.tags("SPAN")
X2wW(U6M5k+aC0                        For each Element in Page_doc_c51Testing软件测试网p kPwg
                                str=str+"  "+Element.outertext51Testing软件测试网n*_rdx Y6?
                        Next
c5tU6J6h,P0                        Set Page_doc_a=nothing
uv9}D ? w+^0                        Set Page_doc_b=Nothing
K.\c*^&@0                        Set Page_doc_c=nothing51Testing软件测试网+M LU c+p o
          End if51Testing软件测试网6{4Q3w6qBQ%a?
          51Testing软件测试网"mKs@B v#k y
        frame_count=browser("browser").page("index:=0").object.frames.length
?K0FO`ct7J0        If frame_count<>0 Then
Llf2pm-~0            Set Desc = Description.Create()
e8~Cn3BD-}M*I7i0                        oDesc("html tag").Value = "iframe"
,a:r Ua6X)K0                        set frame_obj = browser("browser").page("index:=0").ChildObjects(oDesc)  
B4@&v1w!Wly0                        For i=0 to frame_count-1
w-dh4ce0                                        set Page_doc_a=frame_obj(i).Object.documentElement.all.tags("body")51Testing软件测试网q-K&j!o$C*| t&X
                                        For each Element in Page_doc_a
#x^-SboF0                                                        str=str+"  "+Element.outertext
A-V:S7f$I.y'b0                                        next
%}C|V K0                                        set Page_doc_b=frame_obj(i).Object.documentElement.all.tags("input")51Testing软件测试网0W#?3KM1G!sv
                                        For each Element in Page_doc_b
zU'\G8k)s:Ws-}0                                                        str=str+"  "+Element.value51Testing软件测试网FY2KO%c.o4e
                                        Next
r;T+VR|I8Rn4GGN0                                        set Page_doc_c=frame_obj(i).Object.documentElement.all.tags("SPAN")
| k:Tul+w?*w0                                        For each Element in Page_doc_c
3m\;OZ`-o0                                                        str=str+"  "+Element.outertext
5fk5v^+]2Y0                                        next51Testing软件测试网1j i(f;`a-mf
                                        set Page_doc_a=nothing51Testing软件测试网,j[Z-i0b
                                        set Page_doc_b=Nothing51Testing软件测试网 lx%y2?4[,oTS
                                        set Page_doc_c=nothing
'\!V0L.i-};`9MW0                        Next
$px&`J1\R0        End If51Testing软件测试网S}1oY!t[%t
        str=str+"  "+browser("browser").WinStatusBar("msctls_statusbar32").getroproperty("text") ' WinStatusBar的对象需要自己添加进对象库51Testing软件测试网4e&s Lj_L|5w
        New_Page_DocExist=RegExpbld (reg,str)
f \E?#vu|\0End Function51Testing软件测试网$n6P N4PIi(iFt

v fn;`e0优势: 方法编写能把标题捕获,状态栏捕获也加进去
V'W!ZG o0       捕获的字样比较全面,较为准确
5UAE-t@f&ny h0       可移植强
#^0xPEK_#{051Testing软件测试网1zB3FSY&c%@d;s
弊端: 使用正则表达式做判断时候时间较长。51Testing软件测试网v&u)sdK8j ]
51Testing软件测试网tePXB#?#{9n
    看完这3个方法后,可能有人会有疑问,那究竟这样真的能够抓到错误吗?在这里,我们只需要再编写多一个截图的功能,并且在跑动脚本过程中只要出现我们定义的“错误”就截图,为的是宁杀错,不放过的精神。值得一提的是,这查找“错误”的方法也适合测试人员在做翻译查找中。因为许多的多语言版本的软件,在翻译方面或者会有漏网之鱼。51Testing软件测试网 ^(Gybz_ ]

2Mgw#j2{2^p~'L#n0[本帖最后由 假装不在 于 2009-4-29 00:13 编辑]51Testing软件测试网q%y)c Z Xp9h

)Z"r3On T051Testing软件测试网/W,gAf2K&@)g!D

本文收录于《51测试天地》电子杂志第十三期。

6_ J.`-RS!K)A}:P051Testing软件测试网xt,\\Ma4T

版权声明:本文出自51Testing软件测试网电子杂志——《51测试天地》第十三期。51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。51Testing软件测试网 A'eV U.|8` ?(x

51Testing软件测试网OS [j ]W

TAG:

假装不在 假装不在 发布于2009-04-29 01:04:02
晚上逛了jifeng的博客发现了createTextRange 这个方法,在速度上比第三步中运行速度要快很多。
7Z)x+Za
Q-}$q
a-p8u软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具
大家可以学习学习。所以第三个方法可以做下简单的修改,然速度提高。同时第3个方法修改时候,需要注意2点
3h1x!FT*qvs!I中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务1、不过这个方法的使用在对按钮的VALUE没有做捕获功能,同样需要再写。
!w+t~*iisW-A
r软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具
2、createTextRange的方法同样在使用过程中需要对frame做个遍历,如果只设置当前的page.object.body会抓不到frame内部的东西(可以玩玩163)L"ZS~^1I)E+?/mj!e
51Testing软件测试网7~Z8s&oD
?

学习永无止尽...
@fOW0I中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务低调发帖,华丽路过。
假装不在 假装不在 发布于2009-04-29 01:05:31
季风的博客是:
;\?YC7|
C(T
Ot51Testing软件测试网
http://www.51testing.com/?92935
#}^_dW"P中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务大家去踩踩有用的东西。
I3^K9c2ki51Testing软件测试网软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具(v ~%U._
P]

低调发帖,华丽路过。
刘沛的测试空间 zte_boy 发布于2009-04-29 11:23:09
打广告呢?哈哈
假装不在 假装不在 发布于2009-04-29 14:46:03

QUOTE:

原帖由 zte_boy 于 2009-4-29 11:23 发表
H9Ev_ O软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具打广告呢?哈哈
软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具e
[/O8C5](dY


-w:p2^8ue7R软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具 中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务-Stm2W,ZI
不是,这叫友情链接。
我来说两句

(可选)

Open Toolbar