对于我来说,学习QTP是一个漫长而有艰苦的过程 。首先我不是计算机及相关专业毕业的(医学相关)。跳入测试部时,我正在接受程序员的培训课程。由于自己认为需要,于是开始学习QTP。#L&`3k*a(o-d,G:p`/y0 刚开始使用QTP,就一直对着说明书,不停的“订飞机票”(订飞机票是说明书里的一个例子)。学会了一个步骤就拿到公司产品上玩玩,回忆起来还是挺有趣的。
'i+OG;f*z
l:Ot6q}B051Testing软件测试网.px[y;c\E g 当我用一些简单的功能开始录制脚本时,发现保存ActiveXScreen的话,生成的脚本很中空间(因为程序会保存每个不同的录制页面),多录一些硬盘空间就满了,而且回放过程会很慢。 但如果不保存活动页(ActiveXScreen),对脚本的再改造/维护起来就相对困难一些。51Testing软件测试网8_z"x}1p9dbv6\B_
51Testing软件测试网8WG7kU;eqPdQ 于是我开始去了解“关键字”视图里的内容,尝试了解代码。慢慢的,我了解到“关键字”视图显示了整个操作步骤,第个组件相对于程序里一个元素。同时还记录了录制过程对该元素的操作和结果。51Testing软件测试网:T8b*AI#`5sU
51Testing软件测试网,J.k5AqKG1n 然后我又开始在论坛在找些资料看看,从有点所谓的高级应用中,我发现脚本的维护并不一定要有“活动页”。实际是QTP所有对象的识别,都存在脚本的一个对象库里了。QTP经常出现无法识别对象的问题,可以从这里着头修改。 51Testing软件测试网;f6mbh
uksk
tCt7~
为了减少QTP脚本占用空间大、录制慢的问题。我查阅了一些资料,可以在设置中进行修改,让脚本中不保存活动控件(ActiveX)或仅保存出错时的录制页面。干脆,我就从此录制页面了。所有的调试都从“关键字”视图和“专家”视图中进行修改。而且关于对象库,QTP也有个选项,可以设置加载页面上所有的对象,我修改成只保存页面上录制过程使用的对象。 这样,脚本的容量问题就解决了,录制后的脚本会比以前小很多,来了个彻底的瘦身。关于录制速度的问题,和保存“活动页”、动态脚本也有一定的关系,另外可以减小启动的加载项(如:去掉VB插件、.net插件,不需要的就不加进来)。这样的脚本上传到TestDirector上,或从TestDirector上调用就不会太慢了。51Testing软件测试网\f8SO]1J(d&O6l%Z8^
O5X/X9x?,K$EY+?7o/O0 然而真正的问题,棘手的问题就不是上面所述的那么简单了。不过都是有办法解决了的,嘿嘿……
tr:b,E3M0P0 以下是我经常遇到的问题:51Testing软件测试网z7Oeu)s7]
C
i
一、无法识别控件。
iFR8V
t%jF]0 二、错误回放过程未知弹出窗口。
{DA]zN ZCC0 三、加载.net插件后和TD的关联问题。
Pz @7BL5J0 四、动态加载元素的识别问题。51Testing软件测试网"]n+UT"v'i_7Y,f
五、调用外部dll的问题。
2M-Utv/A6cy0 六、随机验证码的问题。51Testing软件测试网9QX?kY"wD
(Xa)C9ek?0]4r.MV"Ji0问题一,解决办法有三种:51Testing软件测试网L(W%XG G
1、更改QTP自身对某控件的识别方式,在 tools——Object Identification 中。在这里列出了所有QTP能识别的控件,以及控件的识别方式。你可以给他添加X、Y坐标进行识别。或更明显的,列表中的信息,不按名称识别,而是按ID识别。这个修改可以解决一些问题,具体的赶紧动手试试吧……51Testing软件测试网afa\+G`
2、使用虚拟物件,来定义一个控件,在 tools——Virtual Object 中。在这里可以自定义一个控件。例如在ASP的程序中,程序出错,在客户端的表现形式大部分是一样的,你可以把整个错误页面当成一个控件来识别(感觉不错)。如果加一个判断,出错后你想做什么就由你自己定了。51Testing软件测试网$?:|9U1E4G
S
3、使用低级录制或鼠标录制。用 Test——LowLevelRecording/AnlogRecording 吧,用它录制就不需要什么设置了,他会记录你的程序控件相对屏幕的位置。用LowLevelRecording还有代码可改,用AnlogRecording动作就被封装了(维护性极差)。两者因实际环境更取其长吧……
@&[(['Ki({#F*LL0
d
T)B)u
L)A"WM0问题二的解决过程:51Testing软件测试网$c!S;w$[p4U+|
关于弹出提示的问题,我当时需要情况是这样的。一个信息录入系统,由于数据量很大,查询需要一段时间。QTP回放时动作比较快,点了保存,程序还没反应过来它就进行了下一步操作。这时的操作就和录制时不一样了,程序给出一个提示,但这个提示是录制过程没有的。弹出框是一般都是POP形势(至上)的,导致QTP无法继续回放,结果就是回放失败。 51Testing软件测试网8wz HMf5Txe2g%Q
解决办法有两个:
KKCFyz4U p0 1、进行判断,当出现这个提示时,点是/否/取消按钮。51Testing软件测试网 n
Ir,F:G
U
2、通过 Tools——Recorvery Scenario Manager 设置默认操作。
5Q:sQx @,ZV3L5T0 我最初就是用的第一种方法。写一个函数判断是否出现这个提示,如果出现就点“取消”然后wait(2)。 每个可能出现弹出框的动作后都调用一次这个函数。虽然可以解决这个问题,但回放的效率就低了,而且需要你预知提示框的信息。51Testing软件测试网Xa;l@:O]b
当我知道了第二种方法,显然更科学^_^。它可以对所有预知甚至不知的提示进行指定的操作。
jC~l7F0 实际上,当程序出现了未预知的提示时,可能就是程序的BUG,所以使用上述办法解决工具问题时,也要考虑是否会掩盖程序的缺陷。
f Q2oAr0^)L4JE%q0问题三的解决办法:51Testing软件测试网_mA _7Q
用好QTP后,会不自觉的和TD关联起来。但从TD直接启动QTP时,程序只会加载QTP自带的插件,如果你安装了其它插件(如.net、java、etc.),默认是不加载的。这会导致上传的脚本无法正确执行。解决办法很简单,去Test——Setting里进行Modify吧。从本地打开的脚本,这里不能进行Modify的。所以办法很简单,但如果不知道的话就很难了。当初为这个问题我可是废了八牛三虎之力呢……51Testing软件测试网` P9m_Qzj
VEd*bSf0问题四的解决过程:51Testing软件测试网T,[k;a.E*z N6X#L2S
当我开始改代码时,定义一个动作,然后可以生成N个动作。假设N个动作产生了N个结果,你要对这结果进行处理时,你会发现这N个结果都不能被识别:51Testing软件测试网q6Pz QQ-w/YE1t:_;l
I*@
51Testing软件测试网6y5o_7L/_6q网页上有个表格,是往数据库里加数据的。
2[},};k
a5d7xz9j0两个表格显示在同一个页面上,左边为父表,右边为子表。51Testing软件测试网7lWPI7~5w8^Y1E]w(O
点击左表,右表显示其子项目。
YU$UZnC0结构如下:
E0kVyqJ0A51Testing软件测试网#T;a&Bx7sfC
├─151Testing软件测试网5mC4RH g ln
├─2
^*n$qI+R}0├─3
?V3s'@|$Ri@9|0└─4
JD&F1QEME0B51Testing软件测试网;I#?`8v']^PU
├─151Testing软件测试网Bh
w%Fj@E
├─2
,\o*^%F*J$L8TV*q7D0├─351Testing软件测试网7AK
S$S&Ed
└─451Testing软件测试网/gQ%UBV^I
……
Ou
s.}#s0思想很清晰:51Testing软件测试网'C1p \5Jp9DBR8u,u
添加一个父项A、选中此父项A、对其添加子项1、2、3、451Testing软件测试网R$p3c(C%X
S2G;yp C+j9b
添加一个父项B、选中此父项B、对其添加子项1、2、3、4 ……
5|(`alF)?0
Q}}e9g,M|D/ST
f4j0代码也很简单:51Testing软件测试网4H#q6fuv!{2tG4M9_
dim M '定义父项数51Testing软件测试网TQ.u&sY$BE
dim N '定义每个父项包含的子项数51Testing软件测试网(j[ E Y:mh3l(VY5R
/]s`.C^J$[
W0For i=1 to M51Testing软件测试网$Z-^
E`1Hf:l\
Call 添加父项( i ) 51Testing软件测试网d1@ c C]v.Y`t U
选中父项( i ) '问题就出在这里 51Testing软件测试网x/i kWI5i
For j=1 to bwfl step 1
}8iCY`0 Call 添加子项( j )
l{JF(l7wo0 Next
b7j"l9GH.r
_ XP+ZCp0Next
s&V