51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 15567|回复: 38
打印 上一主题 下一主题

[讨论] 【关于如何解决QTP后期运行速度】

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2008-9-11 12:11:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
【关于如何解决QTP后期运行速度】     
        目前项目中的QTP脚本运行速度,会随着时间的增长而脚本的速度降低,特别是跑了7,8个小时后这种情况越是明显。脚本主要偏向描述的使用,对象库为辅。导致了其中的原因个人分析大概有一下几点:
        1,PC机本身的问题。有时候更糟糕的是提示虚拟内存不足(2G物理内存3G虚拟内存)。大家都有这样的感觉,就算不跑QTP,PC机在自己运行一段时间后,操作响应速度会很明显下降,这个和机器性能有很大关系,一台服务器与一台PC机器跑一个晚上的脚本第2天会发现PC机的程序已经跑不动了,即使有做脚本错误恢复处理,包括重启IE,设置标签等方法再跑,但还是跑不动。

        2,系统庞大,如果大概有2100个不同web页面,当脚本跑不到一半时候速度也会明显下降,系统的临时文件,cookies等的增多,所导致的响应速度降低,会出现IE呈现白色page不无法操作的情况。

        3,脚本在编写过程,忽略对对象的释放操作,这个或者是非程序员的一个通病吧,因为在小的程序或者脚本中,对象释放与否看不出什么效果,但小数怕长计,也会导致QTP本身所占用的系统资源增多。

        4,脚本编写思想。脚本中过度偏向递归使用,深度越大,函数调用与递归增多,对象增多等,会导致QTP到后期时候速度会有所回落,有时也会让QTP出现假死状态,有可能是内存溢出的情况发生。

        5,过分依赖错误处理与智能对象识别。或者很多人说,智能识别不推荐使用,但是,当一个脚本和滚雪球一样,递归也多了,程序的可控性就降低,跟踪难度增大,脚本的维护成本就增多,所以选择维护与开启智能识别时候,后者有更大的优势。由于依靠了智能识别,有时候一些结果报告中会看到很多对象识别不到而懒得去找原因。积累多了问题也会慢慢浮现出来。

        6,网页访问残留,比如说你的表单提交后再回退时,表单里填写的数据还在,这些就是残留在内存里的数据,但一般来说残留量是非常少的。
        
        所以如何在QTP的运行过程中,及时的释放系统资源有着很重大和深远的意义。

经过和大家讨论的结果还有与实际的结合,反复测试等到:
1,引起问题的主要是QTP,IE的内存无法很有效的释放导致
2,脚本问题
3,AJAX技术的使用


解决方法:
  1,使用工具是不可能的了,这个本人已经测试过了。QTP,IE都无法删除。只有在代码中实现内存的回收:
     大家可以参见http://topic.csdn.net/u/20070501 ... 6-87a645e75cfd.html
     自然,我们不是开发,无法做到在QTP运行过程中实现这样的效果
  2,最小化IE!!这点绝对是可以用的,我刚才已经测试过,占用40M的,最小化后,成了2M,然后再做恢复,变成了21M左右,再做操作才慢慢在21M有序的增加。
     所以大家在写代码过程,如果有意识到脚本的IE内存可能没法很好的回收,可以写个最小化再做回复的操作函数。[/
size]


[ 本帖最后由 假装不在 于 2008-9-17 16:30 编辑 ]

本帖子中包含更多资源

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

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

使用道具 举报

该用户从未签到

39#
发表于 2014-3-13 16:37:37 | 只看该作者
之后的工作也会面临到这个问题,看到这些讨论,感觉收获良多,不过,还未实践。先标记一下
回复 支持 反对

使用道具 举报

该用户从未签到

38#
发表于 2011-3-9 14:18:58 | 只看该作者
感觉以后有用,标记一下
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    37#
    发表于 2009-2-22 13:06:56 | 只看该作者
    各位对解决QTP后期运行速度慢的问题进行了深入讨论,对减少测试时间、提高测试效率非常有帮助意义。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    36#
    发表于 2008-9-19 12:43:10 | 只看该作者
    几个高手在一起探讨的问题,果然能给人很大的启迪,哈哈!继续继续……
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35#
     楼主| 发表于 2008-9-19 11:55:40 | 只看该作者
    看来RCPP的一个回复引起了大家的关注呀...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    34#
    发表于 2008-9-19 10:52:32 | 只看该作者
    WMI可以进行管理内存,我目前不知道如何使用,可以让RCPP给我们说明一下,洗耳恭听
    我们一般使用WMI,都是用它来获取计算机的信息,例如:进程信息,以便我们可以Kill掉它,在系统出错或者崩溃的时候。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    33#
    发表于 2008-9-18 11:51:55 | 只看该作者

    回复 29# 的帖子

    WMI可以管理内存吗?
    呵呵,这个没用过,我经常用它或许一些系统信息
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    32#
    发表于 2008-9-18 11:46:53 | 只看该作者
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    31#
     楼主| 发表于 2008-9-18 11:33:14 | 只看该作者
    原帖由 rcpp 于 2008-9-18 11:30 发表
    呵呵,忘记wmi了吧



    wmi不能忘 ,太销魂了。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    30#
     楼主| 发表于 2008-9-18 11:31:29 | 只看该作者
    原帖由 heqingbluesky 于 2008-9-18 10:45 发表
    如果是内存释放的问题,多跟编程的习惯有关系。
    是否存在过期的数据库连接没有释放
    是否存在打开的文件没有关闭
    是否变量在命名后并没有实际的使用
    是否在使用Function的时候,递归调用的层次比较多
    …………… ...


    你总结的很好。
    至于数据库连接释放这个我没考虑到,谢谢你的回复 。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    29#
    发表于 2008-9-18 11:30:19 | 只看该作者

    回复 27# 的帖子

    呵呵,忘记wmi了吧
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    28#
     楼主| 发表于 2008-9-18 11:28:53 | 只看该作者
    原帖由 xiaoyaoke 于 2008-9-18 10:46 发表
    “我昨天后来再研究了下,估计QTP可以帮页面做内存释放(没用的变量之类),这个需要再研究下。”
    我不这么认为的:
    首先QTP在我的理解就是封装了N多其它辅助功能的VBS脚本解释器,这里谈到帮助IE进行内存整理,问 ...

    我的理念是帮页面做变量释放。究竟意义会不会比做最小化操作来得更大些,要看它的成本了。
    如果说帮IE做内存清理,我个人说这点不大可能。
    因为这个是IE自己的机制问题,上一个页面,它的会保存一些类似表单的东西,““如果能实现这样的清理工作,哪么我们点后退后,会发现刚才的那些表单记录都没了””,好像这是不可能的。
    所以要么就每个页面都做一次清理操作,要么就最小化。

    “QTP在我的理解就是封装了N多其它辅助功能的VBS脚本解释器”这个就是我利用的地方,先尝试可以调用或者重定义web中的函数不。
    置于用自定义函数实现页面元素增加,我已经做到了。 可以拿开发员来开下玩笑。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27#
    发表于 2008-9-18 10:46:24 | 只看该作者
    “我昨天后来再研究了下,估计QTP可以帮页面做内存释放(没用的变量之类),这个需要再研究下。”
    我不这么认为的:
    首先QTP在我的理解就是封装了N多其它辅助功能的VBS脚本解释器,这里谈到帮助IE进行内存整理,问题是VBS中这种语言能够管理内存吗?所以如果要实现用QTP去整理IE内存,那么就要再写一个内存清理的工具(用支持内存管理的语言)然后VBS调用;
    其次,进程的理念是现在操作系统的巨大进步,IE在运行中是独立的进程,而QTP虽然控制着IE的运行,但这种控制是应用级控制吧,这两个进程之间没有从属关系,既然如此,在进程的理念中独立的进程间资源是独占的吧,也就是除了进程本身有权限在运行中整理自己的内存空间,其它的程序有这个权限去管理它的资源吗?(操作系统除外)
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    26#
    发表于 2008-9-18 10:45:17 | 只看该作者
    如果是内存释放的问题,多跟编程的习惯有关系。
    是否存在过期的数据库连接没有释放
    是否存在打开的文件没有关闭
    是否变量在命名后并没有实际的使用
    是否在使用Function的时候,递归调用的层次比较多
    ………………
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    25#
     楼主| 发表于 2008-9-18 09:27:24 | 只看该作者
    原帖由 xiaoyaoke 于 2008-9-18 09:09 发表
    建议一本书《深入理解计算机系统》
    现在高级语言风靡,接触底层的机会越来越少,但还是希望大家有时间的时候能够看看,个人感觉挺有帮助的



    我昨天后来再研究了下,估计QTP可以帮页面做内存释放(没用的变量之类),这个需要再研究下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    24#
    发表于 2008-9-18 09:09:43 | 只看该作者
    建议一本书《深入理解计算机系统》
    现在高级语言风靡,接触底层的机会越来越少,但还是希望大家有时间的时候能够看看,个人感觉挺有帮助的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    23#
     楼主| 发表于 2008-9-17 16:32:20 | 只看该作者
    主题已经编辑了一次,现在写了解决办法,不过没有涉及到QTP的内存释放
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    22#
     楼主| 发表于 2008-9-17 15:48:53 | 只看该作者
    原帖由 xiaoyaoke 于 2008-9-17 14:59 发表
    2、楼主的脚本大量使用描述性编程,在页面对象众多时造成对象查找缓慢。
    不认同,大量的描述性编程,在页面对象众多时造成对象查找缓慢,这个应该是造成QTP本身吃内存而不是造成IE。

    这个问题有区别于IE页面变白的那个问题。
    我现在发现很恐怖,哈哈,一个页面有同个webelement,基本信息,不确定,变动很大,而且考虑到通用的情况,我使用了INDEX,而正好,页面有1000个index的情况。
    页面前300个INDEX查找速度很快,但慢慢速度下降,你说的是QTP占内存的原因,我也觉得这点我觉得应该是。
    操作:
    1,QTP对页面操作,从第300个开始操作,速度和第1个开始速度一样。
    2,如果从第1个到300个时候,300个的操作速度明显没有1个快
    3,在跑到第300个时候,做IE重启恢复的操作,QTP的页面出现了有点假死的情况
    这个现象,很直观给我们的感觉是QTP的问题,但QTP查找对象的原理是否会涉及到IE的一些非直观因素,例如缓存之类的呢?

    嘿嘿,中午写了个更会方便的恢复方法,可以很快恢复前面流程留下的场景而又不让IE的内存等提高。这个是业务方面的问题,和技术没多大关系,所以不便公开代码。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    21#
    发表于 2008-9-17 14:59:56 | 只看该作者
    2、楼主的脚本大量使用描述性编程,在页面对象众多时造成对象查找缓慢。
    不认同,大量的描述性编程,在页面对象众多时造成对象查找缓慢,这个应该是造成QTP本身吃内存而不是造成IE。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-6-26 01:18 , Processed in 0.090298 second(s), 29 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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