性能测试工作室:http://www.cnblogs.com/preftest 个人博客: http://hi.baidu.com/higkoo

QTP的学习历程

上一篇 / 下一篇  2007-01-10 12:42:59 / 个人分类:测试技术

上一篇我针对自动化写了一篇文章,现在就QTP(MI公司的QuickTestPro.)谈谈我的感想。51Testing软件测试网`Hui"M!kr

     对于我来说,学习QTP是一个漫长而有艰苦的过程 重伤 。首先我不是计算机及相关专业毕业的(医学相关)。跳入测试部时,我正在接受程序员的培训课程。由于自己认为需要,于是开始学习QTP。

|`'U$d I-q051Testing软件测试网&x @k\[2y

    刚开始使用QTP,就一直对着说明书,不停的“订飞机票”(订飞机票是说明书里的一个例子)。学会了一个步骤就拿到公司产品上玩玩,回忆起来还是挺有趣的。51Testing软件测试网2_u$s7m W`7ev

51Testing软件测试网NH4k2xgD

   当我用一些简单的功能开始录制脚本时,发现保存ActiveXScreen的话,生成的脚本很中空间(因为程序会保存每个不同的录制页面),多录一些硬盘空间就满了,而且回放过程会很慢。 郁闷 但如果不保存活动页(ActiveXScreen),对脚本的再改造/维护起来就相对困难一些。51Testing软件测试网rXM%P'l n#?:C

51Testing软件测试网PE?L+iz&D1b

   于是我开始去了解“关键字”视图里的内容,尝试了解代码。慢慢的,我了解到“关键字”视图显示了整个操作步骤,第个组件相对于程序里一个元素。同时还记录了录制过程对该元素的操作和结果。51Testing软件测试网E(i9AR s cZ+L

g Hx6aHZ0    然后我又开始在论坛在找些资料看看,从有点所谓的高级应用中,我发现脚本的维护并不一定要有“活动页”。实际是QTP所有对象的识别,都存在脚本的一个对象库里了。QTP经常出现无法识别对象的问题,可以从这里着头修改。 灯泡 
+KeQ*n9uz0   为了减少QTP脚本占用空间大、录制慢的问题。我查阅了一些资料,可以在设置中进行修改,让脚本中不保存活动控件(ActiveX)或仅保存出错时的录制页面。干脆,我就从此录制页面了。所有的调试都从“关键字”视图和“专家”视图中进行修改。而且关于对象库,QTP也有个选项,可以设置加载页面上所有的对象,我修改成只保存页面上录制过程使用的对象。 咖啡 这样,脚本的容量问题就解决了,录制后的脚本会比以前小很多,来了个彻底的瘦身。关于录制速度的问题,和保存“活动页”、动态脚本也有一定的关系,另外可以减小启动的加载项(如:去掉VB插件、.net插件,不需要的就不加进来)。这样的脚本上传到TestDirector上,或从TestDirector上调用就不会太慢了。
51Testing软件测试网,Yd8Z7f5J+D

51Testing软件测试网7u w5Bg?

   然而真正的问题,棘手的问题就不是上面所述的那么简单了。不过都是有办法解决了的,嘿嘿……51Testing软件测试网6B}_5l"[pW
   以下是我经常遇到的问题:51Testing软件测试网] Pg[G*n*L!o0D1U
       一、无法识别控件。51Testing软件测试网1@$n'V(DU c
       二、错误回放过程未知弹出窗口。
Ek GL"\mN n0       三、加载.net插件后和TD的关联问题。
$\.Y"sM|#HG#_0       四、动态加载元素的识别问题。
|L s9W7iI$k A-z0       五、调用外部dll的问题。51Testing软件测试网Nz^*y@
       六、随机验证码的问题。

UGSf L}051Testing软件测试网 Pf#]p7}+rc#`

问题一,解决办法有三种:51Testing软件测试网9K(K6Ay"\7m
  1、更改QTP自身对某控件的识别方式,在 tools——Object Identification 中。在这里列出了所有QTP能识别的控件,以及控件的识别方式。你可以给他添加X、Y坐标进行识别。或更明显的,列表中的信息,不按名称识别,而是按ID识别。这个修改可以解决一些问题,具体的赶紧动手试试吧……
B~q2t}0  2、使用虚拟物件,来定义一个控件,在 tools——Virtual Object 中。在这里可以自定义一个控件。例如在ASP的程序中,程序出错,在客户端的表现形式大部分是一样的,你可以把整个错误页面当成一个控件来识别(感觉不错)。如果加一个判断,出错后你想做什么就由你自己定了。51Testing软件测试网?KT9Tk,W
   3、使用低级录制或鼠标录制。用 Test——LowLevelRecording/AnlogRecording 吧,用它录制就不需要什么设置了,他会记录你的程序控件相对屏幕的位置。用LowLevelRecording还有代码可改,用AnlogRecording动作就被封装了(维护性极差)。两者因实际环境更取其长吧……51Testing软件测试网\.i x-C]Q~&u

51Testing软件测试网J7B|.o5p.W4Snj

问题二的解决过程:51Testing软件测试网7u1I0u.T1TI(a
关于弹出提示的问题,我当时需要情况是这样的。一个信息录入系统,由于数据量很大,查询需要一段时间。QTP回放时动作比较快,点了保存,程序还没反应过来它就进行了下一步操作。这时的操作就和录制时不一样了,程序给出一个提示,但这个提示是录制过程没有的。弹出框是一般都是POP形势(至上)的,导致QTP无法继续回放,结果就是回放失败。 调皮 51Testing软件测试网c(H7p |*{t n
解决办法有两个:
(ovEp^2Q}0       1、进行判断,当出现这个提示时,点是/否/取消按钮。
/a&H~#B9nq0        2、通过 Tools——Recorvery Scenario Manager 设置默认操作。51Testing软件测试网'S1u;Z I+N\1zc9b/T
    我最初就是用的第一种方法。写一个函数判断是否出现这个提示,如果出现就点“取消”然后wait(2)。    每个可能出现弹出框的动作后都调用一次这个函数。虽然可以解决这个问题,但回放的效率就低了,而且需要你预知提示框的信息。51Testing软件测试网~7i XJST8_0N
    当我知道了第二种方法,显然更科学^_^。它可以对所有预知甚至不知的提示进行指定的操作。51Testing软件测试网T%e*i v6e)t2iB\w!fL
    实际上,当程序出现了未预知的提示时,可能就是程序的BUG,所以使用上述办法解决工具问题时,也要考虑是否会掩盖程序的缺陷。

X$GojU051Testing软件测试网2x r7f+}%Z9R%q

问题三的解决办法:51Testing软件测试网o z\'\d(u `
      用好QTP后,会不自觉的和TD关联起来。但从TD直接启动QTP时,程序只会加载QTP自带的插件,如果你安装了其它插件(如.net、java、etc.),默认是不加载的。这会导致上传的脚本无法正确执行。解决办法很简单,去Test——Setting里进行Modify吧。从本地打开的脚本,这里不能进行Modify的。所以办法很简单,但如果不知道的话就很难了。当初为这个问题我可是废了八牛三虎之力呢……

M[@ G3^&@}051Testing软件测试网8H }\9{H1O

问题四的解决过程:
'|a.v z O:c6wIT,C!Q0     当我开始改代码时,定义一个动作,然后可以生成N个动作。假设N个动作产生了N个结果,你要对这结果进行处理时,你会发现这N个结果都不能被识别:51Testing软件测试网g waRF,b:P

\ xwhC3sZ:rt"bZ0网页上有个表格,是往数据库里加数据的。
L \k#w3Ffd*T,\0两个表格显示在同一个页面上,左边为父表,右边为子表。51Testing软件测试网|u&C1ln'z:q1\!I#w
点击左表,右表显示其子项目。 51Testing软件测试网^3B%LW2j
结构如下: 闹钟 51Testing软件测试网{ m._8T W:b8J
A
+ataR$Z*k@+N0├─151Testing软件测试网Me$StpHEu
├─2
$g3G!@8\3|&Bs0├─3
"pB3k E iFW#T0└─4
W })zV$F*D$[%G-U,{x0B51Testing软件测试网b:A&l.^-R
├─151Testing软件测试网 e K4xsY d:yiS
├─2
qNj+qjN0u`2E0├─351Testing软件测试网1z,B-IP.T~I)^v
└─4
c%yFs/i0I-K!x-b)| W C0                    ……
:G~$dMO?\0思想很清晰:51Testing软件测试网"{ iN2K[
添加一个父项A、选中此父项A、对其添加子项1、2、3、451Testing软件测试网4[&|%|T;g
添加一个父项B、选中此父项B、对其添加子项1、2、3、4  ……
d@Z+D:^0
*B5]"IxbwZ;`0代码也很简单:51Testing软件测试网 A0hpl!e:K*za
dim M          '定义父项数51Testing软件测试网Ys1Ix](_
dim N          '定义每个父项包含的子项数51Testing软件测试网.`lED~.fR
51Testing软件测试网*m ?i&pNI&t
For i=1 to M51Testing软件测试网F(X2A.ki$}1A
      Call 添加父项( i )       51Testing软件测试网{*zEL s9SJ
      选中父项( i )              '问题就出在这里 流泪 
[K nh+S4QW%S K8Z0   For j=1 to bwfl step 151Testing软件测试网5V/Z"Zre-jT
       Call 添加子项( j )
5V_HZ\#s0    Next       51Testing软件测试网\(Q?Hbm N_D|*u9z!]
Next
?d#lD*w051Testing软件测试网P\X My2t"Jt0Nl
现在问题出来了,思路应该没有问题(除非这方法真的行不通),循环也是顺着思想来的。
O:MSII;yK0
b+[4w5d'ct$J2Ivb*[0问题是,无法实现选中的父项(最多识别到一个)。
g`Na^b/sW#J0由于此循环可以在录制过程进行,如果不改变变量名称,循环可且只可以成功运行一次。问题是这个名称都是从DataTable里获取的。
4a q B,q+b0因为,在运行过程中生成的项目没有加到对象库中,无法被识别。51Testing软件测试网 |U5GT)P,JW.f

}b v4T's^oRj0   这个问题最后是从思想上解决的。答案是我做的是功能测试,为什么不先加父项,检查父项的功能是否正常,然后再去测子项的功能。不去改变名字,因为那没有必要。核心答案“功能测试、测试功能”。即对测试工具首先需要有正确的认识。51Testing软件测试网9_3Dd\V,^
   当然,这个问题可以用代码去实现,但那需要有一定的编程功底且耗时,可维护性不一定好。有需要的朋友可以去试一下,然后把你的经验也共享一下。 *^_^*51Testing软件测试网O~H;Ri%EBP

51Testing软件测试网KEf$s*J:v"g

问题五,是对QTP很大的一个扩充。 强 
+o6tu2N J']0    对于QTP调用外部DLL的功能,由于我的编程功底不够,没有相关人士配合我,我只能望之垂涎了!
K W2RI[`$XW-\$s)HS0    如果能调用外部DLL的话,QTP的功能就可以变得很强大。自己写的程序,自己编一些过程用QTP进行测试,我想“后果很严重” 偷笑 。真想有一次给我尝试的机会……
5QA J]ri'VS,h0
51Testing软件测试网^8L^ o w+Ku6A

问题六,解决办法有4个:51Testing软件测试网2S-K;T9FWcS g
    1、测试的时候,让程序员把这块限制去掉,免去验证这关。
uo*jA W-b;N)\ p0    2、让程序员提供一个万能验证码,测试可以绕过这一关。51Testing软件测试网3@kF2Q4Ukr
    3、请程序员提供识别的方法,从获取的图片读出验证数据,再传给QTP。51Testing软件测试网L!]Ut*FC2])}f
    4、进行位图检查,将验证码分段进行图像验证。
51Testing软件测试网!p^5ra I X-k/^o"J*Z!C
    实际上,验证码的目的就是防止用程序灌水或机器录入信息。所以有点为难我们测试了。51Testing软件测试网$r} CB`)Oih5C
方法1,如果程序已在发布并有客户使用,危险性是可想而知的。方法2虽然可以解决验证这一关,但跳过了输入码与验证码一致性问题。方法3就需要程序员配合了,可能就需要调用DLL了。方法4却将图像分段,把获取的图像和已经的图像进行比对,比对通过取对应的值;这个在数字验证会好做一点,因为最多就四个图像的比对。
+RTsg9j9pd8{.q5H0    关于网上的汉字验证码,那块的测试我就不知道他们是怎么做的了。真想了解一下! 红心 
 
    以上就是我对过去QTP学习过程的一个总结。供天下各界朋友参观、发言、讨论,也是对我过去的一个写照,可能N年后,自己看到会很有感觉呢 谄媚 。
    现在又有项目来了,我学习的时间慢慢也少了。新项目里融合了C++程序,QTP对C++的识别似乎很不理想,也许是需要插件支持吧。过程中我尝试了Rational的Robot,Robot对C++的识别很好,但Rational一套组件内容太多,对汉字的支持似乎也不是很好。用了一段时间我就把它从硬盘中给清掉了…… 花谢 51Testing软件测试网3on*K/jeK?C9P
    QTP的学习就在此停住了,不能应用到项目中,单纯看着说明书的学习,我好像不太在行。 微笑 也许是真的需要活学活用,边学边用吧。或者我不够书呆子吧……

TAG: 计算机 电脑 软件 测试 QTP 测试技术

xiaoshi_2011的个人空间 引用 删除 xiaoshi_2011   /   2015-01-15 15:13:26
5
vaniling 引用 删除 vaniling   /   2012-05-09 15:28:35
5
引用 删除 jiangshaowei030   /   2012-05-08 11:29:57
5
测试人生 引用 删除 fairy2011   /   2011-11-16 17:59:09
我也在学习qtp,继续加油
chunxia001的个人空间 引用 删除 chunxia001   /   2011-11-15 11:29:34
我也是新手啊,开始要学习QTP,如果有好的学习教程,特别是案例演示的教程,希望能发我邮箱,非常感谢啊!chunxia5168@163.com
chunxia001的个人空间 引用 删除 chunxia001   /   2011-11-15 11:28:40
5
TEST LIFE 引用 删除 Tomy1q   /   2011-09-30 10:39:22
我也是新手啊,开始要学习QTP,如果有好的学习教程,特别是案例演示的教程,希望能发我邮箱,非常感谢啊!lipingp2006@163.com
引用 删除 hansiyi   /   2010-09-02 15:48:45
新手,希望有机会能向大家好好学习
hacker14的个人空间 引用 删除 hacker14   /   2010-08-06 14:50:04
呵呵。发相关资料给我可以么,hacker14@163.com谢谢了
引用 删除 braviper   /   2010-08-04 15:34:54
3
引用 删除 yexiaohua1988   /   2010-07-26 23:24:09
你好,我是新手,正想学习QTP,能提供下QTP软件和相关资料吗?  yexiaohua1988@126.com
谢谢哈
zxhsr的个人空间 引用 删除 zxhsr   /   2009-09-15 15:50:02
很好
zxhsr的个人空间 引用 删除 zxhsr   /   2009-09-15 15:49:54
1
引用 删除 珍妮.徐   /   2008-12-29 20:52:34
你好,我是新手,目前正在自学QTP。请问除了QTP软件自带的说明书,请问还有其他比较好的教材吗,特别是案例教材?如果有,你能提供下吗,你可以发我的邮箱是xhl313@163.com.非常感谢!
heqingdan的个人空间 引用 删除 heqingdan   /   2007-12-04 13:30:19
你人很好
higkoo 引用 删除 higkoo   /   2007-01-21 17:50:06
http://www.51testing.com/html/27/1995.html

居然被录用了?
 

评分:0

我来说两句

higkoo

higkoo

Just do it.

日历

« 2024-01-01  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 246675
  • 日志数: 56
  • 图片数: 1
  • 文件数: 18
  • 建立时间: 2007-01-10
  • 更新时间: 2008-09-30

RSS订阅

Open Toolbar