51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 18146|回复: 46
打印 上一主题 下一主题

关于回放过程异常的处理办法。

[复制链接]
  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2006-8-24 14:05:17 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    原贴:
    在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 编辑 ]

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-11-24 13:15
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    47#
    发表于 2012-11-30 15:29:43 | 只看该作者
    收了!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    46#
    发表于 2008-5-26 11:10:54 | 只看该作者

    用QTP检检查点的用法?

    我知道QTP里面有文本文本区域检查点,图像检查点,数据库检查点,标准检查点,但是我不知道它们具体是测什么的?比如我要是像测网页链接应该用什么检查点?测莫个控件应该用什么检查点?。。。。。。。。。




    回复 支持 反对

    使用道具 举报

    该用户从未签到

    45#
    发表于 2008-4-27 12:52:45 | 只看该作者

    多谢楼主

    多谢楼主指教,
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    44#
    发表于 2008-4-25 18:07:05 | 只看该作者
    回家去看看了哈哈
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    43#
    发表于 2008-1-23 13:40:29 | 只看该作者
    正在使用中,还没碰到楼上的问题。。留个记号先。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    42#
    发表于 2008-1-17 13:40:26 | 只看该作者

    受益匪浅呀!!

    初学qtp,受益匪浅,谢谢各位大侠了!回去尝试下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    41#
    发表于 2008-1-16 19:42:27 | 只看该作者
    这个问题我感觉参考yabest的测试处理方法就可以了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    40#
    发表于 2007-8-31 14:09:47 | 只看该作者
    正在学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    39#
    发表于 2007-8-28 10:10:50 | 只看该作者
    higkoo,你好,中文的帮助给我也发一份吧,谢谢,我的msn是menger6@hotmail.com
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    38#
    发表于 2007-8-18 17:37:18 | 只看该作者

    支持一个

    顶!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37#
    发表于 2007-8-16 18:04:34 | 只看该作者
    先学习下。我也遇到这问题了。不过暂时还没那么复杂,只一个wait就搞定了

    [ 本帖最后由 kangaroo 于 2007-8-16 18:45 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    36#
    发表于 2007-7-27 18:16:25 | 只看该作者
    二、错误回放过程未知弹出窗口。

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

    这样就可以在出现错误提示框时点击取消,没有出现时跳过这步
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    35#
     楼主| 发表于 2007-5-17 12:46:54 | 只看该作者

    回复 #1 higkoo 的帖子

    QTP脚本维护的方法


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

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

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

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

    使用

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

    即可 sdlkfj3  如此简单。   

                 哈哈……sdlkfj5
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    34#
    发表于 2007-1-9 17:57:35 | 只看该作者
    想请教下Recovery Scenario具体应该怎么做,我试的都没有成功:(

    [ 本帖最后由 sleepkitty 于 2007-1-9 18:05 编辑 ]
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    33#
    发表于 2006-10-21 11:49:45 | 只看该作者
    我已经用过了,不过还是谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    32#
     楼主| 发表于 2006-10-4 11:19:57 | 只看该作者

    关于Wait函数

    Wait函数很简单的,你可以查找 一下帮助。
    进入QTP操作界面,按F1键出来帮助,在索引里输入Wait,就有相关说明了。
    Wait用法:
          Wait(Time)
    其中Time是以秒(Second)计算的。
    意思就和英文翻译一样,等待几秒钟,如此而已。   *^_^*
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    31#
    发表于 2006-9-29 16:48:09 | 只看该作者
    wait事件是怎么加的?前辈指教吧
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-12-26 13:34
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    30#
     楼主| 发表于 2006-9-15 22:32:39 | 只看该作者

    to ljitry

    原帖由 ljitry 于 2006-9-15 12:02 发表
    有没有什么资料和实例!!!!?谢谢


    我的帮忙文件是中文的,MSN上有你,周一给我个消息我传给你。sdlkfj2
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-9-26 05:58 , Processed in 0.091902 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表