51Testing软件测试论坛

标题: 嫌速度慢,嫌步骤冗余,这一切都源于你对QTP不够了解。 [打印本页]

作者: jackymail    时间: 2007-8-3 14:42
标题: 嫌速度慢,嫌步骤冗余,这一切都源于你对QTP不够了解。
执行速度和对象识别的属性关系最大。和对象库里面对象多少关系很小很小。

步骤冗余。。。还是没设置好,我录制的就是跟所谓的框架产生的步骤基本一样的,。。


欢迎讨论。。。
作者: songfun    时间: 2007-8-3 15:04
如果你用描述性编程的话,执行速度也会受到影响。尤其是隐式声明Description对象。
作者: loho1968    时间: 2007-8-3 15:37
原帖由 songfun 于 2007-8-3 15:04 发表
如果你用描述性编程的话,执行速度也会受到影响。尤其是隐式声明Description对象。


>>隐式声明?
是否是指定vbwindow("text:=记事本").active这种方式?
这种方式肯定慢,因为每次识别对象都是却分析属性,然后现来识别。使用Description速度会快些。但和使用对象库的方式,速度要快多少,有人试验过吗?
作者: jackymail    时间: 2007-8-3 15:40
......

[ 本帖最后由 jackymail 于 2007-8-3 16:00 编辑 ]
作者: sidneylover    时间: 2007-8-3 15:43
哈哈,你两干上了
作者: jackymail    时间: 2007-8-3 15:46
......

[ 本帖最后由 jackymail 于 2007-8-3 16:00 编辑 ]
作者: loho1968    时间: 2007-8-3 16:15
原帖由 jackymail 于 2007-8-3 15:46 发表
互相学习嘛,有分歧才会有进步。呵呵
那哥们也挺厉害的,值得请教。。。

赞成,不是“干”,交流才能进步。


我认为,不管是使用隐式申明,Description对象,还是直接使用对象库中的对象,每次执行vbwindow(???).active时,QTP都要去识别对象。作了如下的试验

     vbwindow("dd")只有一个识别属性,就是窗体的Caption

        Set hh=vbwindow("dd")
       
        Set jj=hh.Object
       
       
        jj.Caption="asfasdf" '改变了窗口的标题
        vbwindow("dd").Activate '执行出错,因为找不到对象了
        jj.Caption="检验仪器管理" '而jj这个对象却还可以继续使用
        vbwindow("dd").Activate '执行成功,因为caption又对了。
作者: lengz    时间: 2007-8-3 16:23
呵呵,谁知道songfun还会进来么
作者: 5555    时间: 2007-12-13 15:49
没使用描述性语言,回放时特别慢,修改后速度快了很多,语句如下:
前: browser("预订编辑").Page("预订编辑").Sync                       耗时:15-20秒
后: browser("title:=预订编辑").Page("title:=预订编辑").Sync   耗时:1秒左右
作者: mythxhg    时间: 2007-12-13 16:28
还不是枚举之后匹配,
事实上枚举对象的数量是由实际运行的对象数量确定.

你用描述事实上也只是根据描述来匹配枚举出来的一系列对象.

打个比方,假如系统现在可以枚举出10个对象,对象仓库有10个对象
直接用描述的话就是不需要经过对象仓库拿具体匹配的属性数据,但是跟系统的匹配次数还是10(假设都很不幸的要最后一次才匹配到)
使用对象仓库的话是先要根据名字在对象仓拿属性数据,这一步需要10(假设都很不幸的要最后一次才匹配到),然后再到枚举列表里查找和匹配,就是整个过程是10+10.是相加,而不是相乘,所以复杂度其实还是同一个几何级的.

所以理论上用描述的话少了到对象仓找属性数据的过程,要比使用对象仓的快,但是影响有限,而且描述和对象仓2种的区别的大小正是跟对象仓的对象多少有关.

定位时间 = 在枚举中匹配的时间 + 取对象属性的时间进行匹配的时间.

这个工具的定位对象的过程跟MFC程序员定位对象的过程应该没区别的(我不知道工具的源码,但是实现这个功能的原理是一样的).先枚举所有窗口和对象.然后根据指定的属性值去遍历枚举到的所有对象,匹配到的话马上返回.

当然,以上都基于一个假设,使用对象仓的方法是根据脚本指定的对象名再到仓库中拿属性值.
对错于否自己想,爱咋D就咋D,爱拿砖头砸就砸吧.
作者: walker1020    时间: 2007-12-13 17:43
任何测试都离不开环境,使用QTP进行自动化测试也一样。如果你打开了N个窗口,特别是有与测试的系统无关的网页时,无论对象是放在对象库里面,还是采用描述性编程“临时”找到的对象,那么 执行速度都会受到影响。
作者: walker1020    时间: 2007-12-13 17:44
因此我们要尽量保持环境的干净,如果有单独的测试机器就最好了。
作者: walker1020    时间: 2007-12-13 17:48
如果应用程序变化很大,特别是对象的属性改变很大或GUI变化非常大,那么 QTP很有可能无法根据原来的属性及其属性值找到相匹配的对象,这时QTP就会 采用 Smart Identification 技术去找类似的对象。如果还是没有找到,那么 就报告错误。在这个寻找到过程中,肯定要花费一定的时间。
作者: walker1020    时间: 2007-12-13 17:50
因此 需要我们对QTPP脚本进行增强,如你已经预测到 Image对象的 text 属性(其属性值 与测试系统的URL有关系)在以后有的测试版本里面会发生变化,那么就尽量不要以text 作为识别  Image对象的依据。
作者: walker1020    时间: 2007-12-13 17:54
欢迎 大家踊跃讨论。如果有这方面的问题 说出来也可以
作者: yabest    时间: 2007-12-13 17:59
原帖由 5555 于 2007-12-13 15:49 发表
没使用描述性语言,回放时特别慢,修改后速度快了很多,语句如下:
前: browser("预订编辑").Page("预订编辑").Sync                       耗时:15-20秒
后: browser("title:=预订编辑").Page("title:=预订编辑 ...


你这案例肯定是测试环境有问题,或者是仓库对象描述有问题。
我用了那么多年的Sync,都是用对象库方式的,从来都是飞快的完成的,从没有遇到过如此变态的情况。

[ 本帖最后由 yabest 于 2007-12-13 18:02 编辑 ]
作者: yabest    时间: 2007-12-13 18:21
原帖由 mythxhg 于 2007-12-13 16:28 发表
还不是枚举之后匹配,
事实上枚举对象的数量是由实际运行的对象数量确定.

你用描述事实上也只是根据描述来匹配枚举出来的一系列对象.

打个比方,假如系统现在可以枚举出10个对象,对象仓库有10个对象
直接用描述 ...


对象库方式定位对象时间 = 根据名字在对象库中查找仓库对象的时间   + 根据仓库对象的过滤属性在被测软件中查找对象的时间
描述性方式定位对象时间 = 解析脚本里的对象描述得到过滤属性的时间 + 根据仓库对象的过滤属性在被测软件中查找对象的时间

对象库方式:
  计算机里的查找算法很多的,啥二分法、哈希法啥的,否则在大数据库里找一条记录岂不是要等得累死!
  QTP的对象库就是一个小型的数据库了,事先已经进行解析和优化了。几百条内的记录查找,对计算机来说,简直不值一提,丝毫感觉不到。
描述性方式:
  解析脚本里的对象描述得到过滤属性,一般也就那么一两个属性,计算机解析一下这个,也是不值一提的。

所以我觉得两种方式的花费时间,几乎是相同的。
作者: mythxhg    时间: 2007-12-13 18:28
标题: 回复 17# 的帖子
你说的没错,我只是在解析2个方法之间的区别而已,如何查找用什么算法都不需要理会.时间上有区别,但是会很少,如你说的,甚至可以忽略不计.




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