51Testing软件测试论坛

标题: 关于回放过程异常的处理办法。 [打印本页]

作者: higkoo    时间: 2006-8-24 14:05
标题: 关于回放过程异常的处理办法。
原贴:
在QTP里,想增加一个假设:
   If  弹出对话框 Then
      点取消按钮
        End If
其中“弹出对话框”和点“取消”按钮的代码怎么写啊?

sdlkfj3需求是这样产生的,用QTP测一个.net的C/S结构程序,在数据表里模拟了1000条数据。
测试过程发现程序反应越来越慢,然后有时点了按钮没反应,继续操作后会出现一个提示。
但在录制过程是没有这个提示的。sdlkfj7
我个提示只要我点取消就可以正常继续往下运行。
但咱就不知怎么自定义这个提示了,请大侠相助。。。sdlkfj9

此类问题初由#10楼的Chill所述的Recovery Scenario Manager方法解决,也有很多朋友发现了自己的看法和意见,如果遇到类似的问题可以参考参考……

#21、#22引入了新问题,希望大家各抒己见。sdlkfj3

21楼所述是一个关于参数与逻辑思路的问题,很常见的问题,但啥子我就不知如何解决。

22楼也是一个无法识别的问题,至今也没解决。添加虚拟物件也不行。
关于那个程序我问了一下开发,那程序很复杂,不是单纯的.net,有些处理是用的VC++。
不知是不是这个原因,如果是,有知有何解决办法?闷闷很久了  :(

2007-06-17,补充:
   然而真正的问题,棘手的问题就不是上面所述的那么简单了。不过都是有办法解决了的,嘿嘿……
   以下是我经常遇到的问题:
       一、无法识别控件。
       二、错误回放过程未知弹出窗口。
       三、加载.net插件后和TD的关联问题。
       四、动态加载元素的识别问题。
       五、调用外部dll的问题。
       六、随机验证码的问题。

问题一,解决办法有三种:
   1、更改QTP自身对某控件的识别方式,在 tools——Object Identification 中。在这里列出了所有QTP能识别的控件,以及控件的识别方式。你可以给他添加X、Y坐标进行识别。或更明显的,列表中的信息,不按名称识别,而是按ID识别。这个修改可以解决一些问题,具体的赶紧动手试试吧……
   2、使用虚拟物件,来定义一个控件,在 tools——Virtual Object 中。在这里可以自定义一个控件。例如在ASP的程序中,程序出错,在客户端的表现形式大部分是一样的,你可以把整个错误页面当成一个控件来识别(感觉不错)。如果加一个判断,出错后你想做什么就由你自己定了。
   3、使用低级录制或鼠标录制。用 Test——LowLevelRecording/AnlogRecording 吧,用它录制就不需要什么设置了,他会记录你的程序控件相对屏幕的位置。用LowLevelRecording还有代码可改,用AnlogRecording动作就被封装了(维护性极差)。两者因实际环境更取其长吧……
问题二的解决过程:
关于弹出提示的问题,我当时需要情况是这样的。一个信息录入系统,由于数据量很大,查询需要一段时间。QTP回放时动作比较快,点了保存,程序还没反应过来它就进行了下一步操作。这时的操作就和录制时不一样了,程序给出一个提示,但这个提示是录制过程没有的。弹出框是一般都是POP形势(至上)的,导致QTP无法继续回放,结果就是回放失败。  
解决办法有两个:
        1、进行判断,当出现这个提示时,点是/否/取消按钮。
        2、通过 Tools——Recorvery Scenario Manager 设置默认操作。
    我最初就是用的第一种方法。写一个函数判断是否出现这个提示,如果出现就点“取消”然后wait(2)。    每个可能出现弹出框的动作后都调用一次这个函数。虽然可以解决这个问题,但回放的效率就低了,而且需要你预知提示框的信息。
    当我知道了第二种方法,显然更科学^_^。它可以对所有预知甚至不知的提示进行指定的操作。
    实际上,当程序出现了未预知的提示时,可能就是程序的BUG,所以使用上述办法解决工具问题时,也要考虑是否会掩盖程序的缺陷。
问题三的解决办法:
      用好QTP后,会不自觉的和TD关联起来。但从TD直接启动QTP时,程序只会加载QTP自带的插件,如果你安装了其它插件(如.net、java、etc.),默认是不加载的。这会导致上传的脚本无法正确执行。解决办法很简单,去 Test——Setting里进行Modify 吧。从本地打开的脚本,这里不能进行Modify的。所以办法很简单,但如果不知道的话就很难了。当初为这个问题我可是废了八牛三虎之力呢……
问题四的解决过程:
     当我开始改代码时,定义一个动作,然后可以生成N个动作。假设N个动作产生了N个结果,你要对这结果进行处理时,你会发现这N个结果都不能被识别:
网页上有个表格,是往数据库里加数据的。
两个表格显示在同一个页面上,左边为父表,右边为子表。
点击左表,右表显示其子项目。
结构如下:  
A
├─1
├─2
├─3
└─4
B
├─1
├─2
├─3
└─4
                    ……
思想很清晰:
添加一个父项A、选中此父项A、对其添加子项1、2、3、4
添加一个父项B、选中此父项B、对其添加子项1、2、3、4  ……
代码也很简单:
dim M          '定义父项数
dim N          '定义每个父项包含的子项数
For i=1 to M
      Call 添加父项( i )        
      选中父项( i )              '问题就出在这里  
   For j=1 to bwfl step 1
       Call 添加子项( j )
    Next        
Next
现在问题出来了,思路应该没有问题(除非这方法真的行不通),循环也是顺着思想来的。
问题是,无法实现选中的父项(最多识别到一个)。
由于此循环可以在录制过程进行,如果不改变变量名称,循环可且只可以成功运行一次。问题是这个名称都是从DataTable里获取的。
因为,在运行过程中生成的项目没有加到对象库中,无法被识别。
   这个问题最后是从思想上解决的。答案是我做的是功能测试,为什么不先加父项,检查父项的功能是否正常,然后再去测子项的功能。不去改变名字,因为那没有必要。核心答案“功能测试、测试功能”。即对测试工具首先需要有正确的认识。
   当然,这个问题可以用代码去实现,但那需要有一定的编程功底且耗时,可维护性不一定好。有需要的朋友可以去试一下,然后把你的经验也共享一下。  *^_^*
问题五,是对QTP很大的一个扩充。  
    对于QTP调用外部DLL的功能,由于我的编程功底不够,没有相关人士配合我,我只能望之垂涎了!
    如果能调用外部DLL的话,QTP的功能就可以变得很强大。自己写的程序,自己编一些过程用QTP进行测试,我想“后果很严重”  。真想有一次给我尝试的机会……

问题六,解决办法有4个:
    1、测试的时候,让程序员把这块限制去掉,免去验证这关。
    2、让程序员提供一个万能验证码,测试可以绕过这一关。
    3、请程序员提供识别的方法,从获取的图片读出验证数据,再传给QTP。
    4、进行位图检查,将验证码分段进行图像验证。
    实际上,验证码的目的就是防止用程序灌水或机器录入信息。所以有点为难我们测试了。
方法1,如果程序已在发布并有客户使用,危险性是可想而知的。方法2虽然可以解决验证这一关,但跳过了输入码与验证码一致性问题。方法3就需要程序员配合了,可能就需要调用DLL了。方法4却将图像分段,把获取的图像和已经的图像进行比对,比对通过取对应的值;这个在数字验证会好做一点,因为最多就四个图像的比对。
    关于网上的汉字验证码,那块的测试我就不知道他们是怎么做的了。真想了解一下!  

    以上就是我对过去QTP学习过程的一个总结。供天下各界朋友参观、发言、讨论,也是对我过去的一个写照,可能N年后,自己看到会很有感觉呢  。
    现在又有项目来了,我学习的时间慢慢也少了。新项目里融合了C++程序,QTP对C++的识别似乎很不理想,也许是需要插件支持吧。过程中我尝试了Rational的Robot,Robot对C++的识别很好,但Rational一套组件内容太多,对汉字的支持似乎也不是很好。用了一段时间我就把它从硬盘中给清掉了……  
    QTP的学习就在此停住了,不能应用到项目中,单纯看着说明书的学习,我好像不太在行。  也许是真的需要活学活用,边学边用吧。或者我不够书呆子吧……
sdlkfj3

[ 本帖最后由 higkoo 于 2007-6-17 18:35 编辑 ]
作者: xiaonan    时间: 2006-8-24 14:12
你这个对话框和“取消”按钮是也要录制下来的,记录到对象库中去,不然QTP是无法识别的.
作者: higkoo    时间: 2006-8-24 14:32
标题: 不是吧 :(
那在测试过程中,不可能考虑到这么全面啊。
也可能在回放过程中,出现一些临时情况怎么办?测试中断?

上述的情况是在点了一个“新建”按钮后发生的。
我可不可以在点了“新建”按钮后面,加一个判断,如果有窗口弹出(提示框信息是已知的),我就点“取消”按钮,否则就不执行任何操作,直接往下走。

不知exist函数是怎么用的,在此能用吗?
作者: xiaonan    时间: 2006-8-24 14:44
"那在测试过程中,不可能考虑到这么全面啊。"
首先,我们在录制脚本的时候,都是应该写好完善的用例的,是根据用例来录制脚本的.不能考虑的这么全面,只能说明前期的准备工作做的不好.

"也可能在回放过程中,出现一些临时情况怎么办?测试中断?"
脚本是严格按照用例情况来录制的,如果出现与预期目标不符,就说明程序有问题.

"上述的情况是在点了一个“新建”按钮后发生的。
我可不可以在点了“新建”按钮后面,加一个判断,如果有窗口弹出(提示框信息是已知的),我就点“取消”按钮,否则就不执行任何操作,直接往下走。"

你这个想法是可以实现的.exist是一个方法,不是什么函数.你只要录一下那个窗口和点取消 按纽,然后最后把它给成.exist就可以了
if  窗口.exist then
   点取消
end if
还有问题,你可以看下帮助,那里面有例子
作者: lyscser    时间: 2006-8-24 14:53
最好的办法还是看Help文档
作者: higkoo    时间: 2006-8-24 15:45
标题: 支持!
四楼楼主回复甚是经练!
小弟依据你的回复,给此问题定义在第二级:
    //"也可能在回放过程中,出现一些临时情况怎么办?测试中断?"
   //脚本是严格按照用例情况来录制的,如果出现与预期目标不符,就说明程序有问题.

应该归纳在程序问题里,说明了一点,程序加载大的数据量后,反应很慢,或是不灵敏。
   多谢指点!
作者: xiaonan    时间: 2006-8-24 16:06
"程序加载大的数据量后,反应很慢,或是不灵敏。"
呵呵,这个应该属于性能测试中的容量测试了,当程序处理大数据量时,系统的响应情况
作者: walker1020    时间: 2006-8-24 16:58
非常同意   xiaonan 版主 在  #4 说的观点!”脚本是严格按照用例情况来录制的。” 你的测试用例规定了需要测试哪些功能,用到哪些测试数据。如果没有测试用例,那么你用QTP进行测试就没有依据,就成了无的放矢、缘木求鱼了。
QTP 只是代替了手工测试,只是一个工具而已。测试工程师要做的事情就是 制定测试计划、编写测试用例、录制脚本、优化和回放脚本、分析Test Report。 在测试流程中,使用QTP 只是其中的一个环节。如果QTP 什么都能做,那么就不需要我们这些测试人员了。 QTP 不能代替一切测试工作,就像 机器永远不能代替人一样!
作者: QA_BAY    时间: 2006-8-24 17:30
支持楼上所说,工具始终是工具!主要的还是测试者本身能力!
作者: chill    时间: 2006-8-24 17:36
楼主可以深入研究qtp的高级功能,qtp中对于这种异常弹出框有专门的恢复机制,请参阅:Recovery Scenario Manager部分
                        chill
作者: 麦子华华    时间: 2006-8-24 18:11
Chill 说得对,对于一些异常弹出窗口,比如文件下载时提示文件已存在,是否覆盖,这可能不是要测试的功

能,而是前一次测试时生成的同名文件,这种情况下就可以用Recovery 机制,脚本里不需要加载相应的脚

本,在Recovery Scenario Manager里添加对应的recovery就可以了
作者: higkoo    时间: 2006-8-25 22:00
标题: Recovery Scenario Manager
OK,我试上下,既然大家这么推荐,不试都不行了。

嘿嘿,有个项目过来了,没那么闲了,有空一定搞通了,向大家报喜
作者: higkoo    时间: 2006-8-29 18:29
标题: OK啦
大家好,问题解决啦:
对于响应问题,我添加了Wait事件。
对于多余的提示,由于提示对程序自身和信息录入没有影响。
本人直接做了个判断,on error resume next 然后在几个容易出错的地方做了判断。
if 出现提示框 then
  点“取消”按钮。
end if

只是学习过程总会遇到这样或那样的问题,但问题总有一天会解决的,我也不气馁的。
希望大家也一样。

有空再帮我参考一下新的问题:
http://bbs.51testing.com/thread-42385-1-1.html
作者: ljitry    时间: 2006-8-31 16:57
你们所说的都是知道了异常消息出现的地方,但如果这地方不知道,异常消息是随机出现的,那你们又该怎么办呢???
作者: walker1020    时间: 2006-8-31 20:01
”异常消息是随机出现的“,先确定一下这是你测试的系统或软件的Bug,还是 脚本或QTP 的问题再说。我还没有从来没有遇到这种情况。
作者: ljitry    时间: 2006-9-1 13:24
系统的时候会出现这个问题
作者: QA_BAY    时间: 2006-9-1 17:38
Recovery Scenario Manager可以解决你的异常窗口的弹出!
无论是程序还是WINDOW的窗口!
作者: ljitry    时间: 2006-9-1 18:13
原帖由 QA_BAY 于 2006-9-1 17:38 发表
Recovery Scenario Manager可以解决你的异常窗口的弹出!
无论是程序还是WINDOW的窗口!


谢谢,我去试试!!!!
作者: higkoo    时间: 2006-9-1 22:36
标题: Recovery Scenario Manager
好东东,最近好忙,没时间看大家的发言,
在此深表歉意。。
QTP里最棘手的问题,我想就是识别问题和出错处理的问题了吧。
关于Recovery Scenario Manager这东东,等周一有环境了。一定玩个痛快。

不知我这个情况有没效:
   我电脑是接两个屏的,一个普通的17寸纯平,另一个是专业PCI接口医用显示器。
   坚屏,很大的一个液晶显示器。分辨率是2048×1536。坐标是-1536,-1280
有的程序是运行是医学显示屏上的,并不在我们操作的屏幕上。
我用QTP基本上完全不能录制,即使用Analog也只能录到登陆和退出,中间的东西一点都没录进去。
回放过程就是登陆、刷新、退出。
非常之郁闷,深刻感受到自动化的不足。

我也用spy跟踪,属性框里一片空白。     :(

有知哪位大侠有高招。

还有一个回放过程优化的问题:
http://bbs.51testing.com/thread-42385-1-1.html
想用参数或其它办法简化一下。
纯录制回放的话,脚本太大也不灵活。

[ 本帖最后由 higkoo 于 2006-9-2 12:41 编辑 ]
作者: higkoo    时间: 2006-9-4 09:48
标题: 好东西
原帖由 QA_BAY 于 2006-9-1 17:38 发表
Recovery Scenario Manager可以解决你的异常窗口的弹出!
无论是程序还是WINDOW的窗口!


  我大概看了一下帮助。这个是专门处理异常窗口或程序异常的,功能挺强大的,顶一下。

好东西!  强烈推荐给大家,大家学习过程中对Recovery Scenario Manager有什么心得和体会,请多多上来交流。

sdlkfj6
作者: higkoo    时间: 2006-9-6 19:47
标题: 新问题
逻辑模糊
一个数据录入信息系统。B/S结构的。
有父项 与 子项。
可以自己增加父项,选择一个父项,可以给此父项增加对应的子项。

现在就有个问题,如图所示:





我可以一步步的录制,然后直接每个Action指定一个DataTable,然后分步执行完成。可以达到目的。

但这种方法太机械化了,且占用空间,需要维护代码量也大。

我试了一下:
select case i
case 1
   选择第一个父项
   插入子项内容
case2
   选择第二个父项
   插入子项内容
......

当然插入子项内容我想应该也可以调用函数来实现,但这样每个子项的内容都是一样的了,并不是顺序下来的。

不知是否可以定义一个变量,可以获取指定的DataTable里指定行和列的Value?如果可以就可以完全在代码中实现赋值。

或其它方法?

请大侠们指点。。。
作者: higkoo    时间: 2006-9-6 19:51
标题: 还有个问题
我用Spy查看那些列表控件的属性,居然什么都没有,空的。

  是不是QTP就完全不能识别啊?  

添加 虚拟物件 也不行,会出错:




不知怎么办才好。

  极度的郁闷中……。。。。

有没其它办法可尝试的?
作者: hadywei    时间: 2006-9-7 16:17
我想问一下Recovery Scenario Manager是个什么东西啊?
作者: ljitry    时间: 2006-9-7 17:56
我也是!有谁能介绍一下吗?大虾们!!!
作者: higkoo    时间: 2006-9-8 08:38
标题: 关于Recovery Scenario Manager
原帖由 hadywei 于 2006-9-7 16:17 发表
我想问一下Recovery Scenario Manager是个什么东西啊?



位于Tools菜单下的Recovery Scenario Manager项,是一个专门管理回放过程中出现异常时的处理方式。

如,回放过程中程序弹出预料之外的提示,怎么办?
1、你可以用代码实现(必须知道可能是什么对话框)控制,或错误跳转。
2、用Recovery Scenario Manager设置,给异常的提示一个默认的处理,或指定的处理。sdlkfj2好东西。

而且Recovery Scenario Manager也可以处理一些QTP自身的一些中断。

不过以上都是理想的情况,实际过程可能会遇到很多其它很实际的问题,需要借助其它方法协助才能完成。

实际处理中遇到什么问题就赶紧提出来吧。

你们遇到的问题,可能也是我曾经遇到的,或是将来会遇到的……sdlkfj2
作者: ljitry    时间: 2006-9-11 11:02
标题: 回复 #25 higkoo 的帖子
有什么资料吗?
作者: ljitry    时间: 2006-9-11 11:08
标题: 回复 #21 higkoo 的帖子
可不可以把你的录程序发给我看看!!ji.liao@hp.com
作者: higkoo    时间: 2006-9-11 17:12
标题: 你要的是?
原帖由 ljitry 于 2006-9-11 11:08 发表
可不可以把你的录程序发给我看看!!ji.liao@hp.com


你好,不知你所说的程序,是被测试的程序还是我录制过程的脚本?sdlkfj1

过程的脚本可以完全公开,不过被测试的程序是加密的。

  我用Analog录制,脚本中也看不到什么,都被封装了。

  方便的话加我QQ:49507356

  MSN:higkoo@tom.com
作者: ljitry    时间: 2006-9-15 12:02
标题: 回复 #25 higkoo 的帖子
有没有什么资料和实例!!!!?谢谢
作者: higkoo    时间: 2006-9-15 22:32
标题: to ljitry
原帖由 ljitry 于 2006-9-15 12:02 发表
有没有什么资料和实例!!!!?谢谢


我的帮忙文件是中文的,MSN上有你,周一给我个消息我传给你。sdlkfj2
作者: 杜鹃    时间: 2006-9-29 16:48
wait事件是怎么加的?前辈指教吧
作者: higkoo    时间: 2006-10-4 11:19
标题: 关于Wait函数
Wait函数很简单的,你可以查找 一下帮助。
进入QTP操作界面,按F1键出来帮助,在索引里输入Wait,就有相关说明了。
Wait用法:
      Wait(Time)
其中Time是以秒(Second)计算的。
意思就和英文翻译一样,等待几秒钟,如此而已。   *^_^*
作者: 杜鹃    时间: 2006-10-21 11:49
我已经用过了,不过还是谢谢!
作者: sleepkitty    时间: 2007-1-9 17:57
想请教下Recovery Scenario具体应该怎么做,我试的都没有成功:(

[ 本帖最后由 sleepkitty 于 2007-1-9 18:05 编辑 ]
作者: higkoo    时间: 2007-5-17 12:46
标题: 回复 #1 higkoo 的帖子
QTP脚本维护的方法


项目过程中,我们往往会录制很多操作。
很多操作是一样的,我们可以设置为可重用脚本。
  操作很相似,但略有不同,我们可以给动作设置参数,或修改副本。
   遇到QTP无法识别或识别错误的,可以尝试低级录制或模拟录制。
    对于已知错误,我们可以做成虚拟对象抒以识别,记录到测试结果中。

如:
我录制了很多通用脚本,现在程序的标题改了
    JavaWindow("程序原名称") 改为 JavaWindow("程序现名称")

脚本全部运行失败,因为对象库里根本就没有JavaWindow("程序现名称")。

可以直接修改对象库里的属性。
也可以加一句话:

使用

JavaWindow("程序原名称").SetTOProperty "title","程序现名称"

即可 sdlkfj3  如此简单。   

             哈哈……sdlkfj5
作者: xihong2004    时间: 2007-7-27 18:16
二、错误回放过程未知弹出窗口。

这个有一个简单的方法,
先录制出点击未知错误提示框的取消按钮
然后把这个操作设置为optional step

这样就可以在出现错误提示框时点击取消,没有出现时跳过这步
作者: kangaroo    时间: 2007-8-16 18:04
先学习下。我也遇到这问题了。不过暂时还没那么复杂,只一个wait就搞定了

[ 本帖最后由 kangaroo 于 2007-8-16 18:45 编辑 ]
作者: anglix    时间: 2007-8-18 17:37
标题: 支持一个
顶!
作者: liulicongcong    时间: 2007-8-28 10:10
higkoo,你好,中文的帮助给我也发一份吧,谢谢,我的msn是menger6@hotmail.com
作者: www1816    时间: 2007-8-31 14:09
正在学习
作者: xiaoyaoke    时间: 2008-1-16 19:42
这个问题我感觉参考yabest的测试处理方法就可以了
作者: chunli29    时间: 2008-1-17 13:40
标题: 受益匪浅呀!!
初学qtp,受益匪浅,谢谢各位大侠了!回去尝试下
作者: dragonflow    时间: 2008-1-23 13:40
正在使用中,还没碰到楼上的问题。。留个记号先。
作者: zemperor    时间: 2008-4-25 18:07
回家去看看了哈哈
作者: centurystone    时间: 2008-4-27 12:52
标题: 多谢楼主
多谢楼主指教,
作者: dong13167397371    时间: 2008-5-26 11:10
标题: 用QTP检检查点的用法?
我知道QTP里面有文本文本区域检查点,图像检查点,数据库检查点,标准检查点,但是我不知道它们具体是测什么的?比如我要是像测网页链接应该用什么检查点?测莫个控件应该用什么检查点?。。。。。。。。。





作者: amyxiaotu    时间: 2012-11-30 15:29
收了!




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2