loho1968 发表于 2007-8-2 15:48:32

原帖由 jackymail 于 2007-8-2 00:13 发表 http://bbs.51testing.com/images/common/back.gif
楼上的不对吧,你定义frmappara and add的代码呢?不用定义就能用啊??
定义以后关键属性发生改变你不用修改定义阿?
还有框架数据配置设置式的自动化测试。
框架就比较宏观了。数据配置我用对象库方法也作 ...

datatable不用我赞成,不如使用EXCEL,因为操作方法几乎一样,但编辑却没有EXCEL方便。

jackymail 发表于 2007-8-2 16:26:29

你说的不对

就算描述性编程,qtp也一样要经过必要的判断步骤。
还有就是对象库里面的描述属性是可选的,你可以选择和你描述性编程使用一样的数量和属性。
你的5个元素修改过程在使用对象库的时候是一样的。
把对应的脚本拿过来添加几个步骤就行了。

工作量肯定只少不多。

描述性编程到底是因何开发。
对象属性存在部分动态变化

不是提供2种录制方式。

yabest说的还是很有道理的。。。qtp在对象识别和获取上花了很大功夫。是重头戏。

原帖由 loho1968 于 2007-8-2 15:34 发表 http://bbs.51testing.com/images/common/back.gif


假设你的脚本全部做好了。现在界面上增了加5个输入的内容,你打算怎么办?
我的办法很简单,打开框架配置的EXCLE,在输入数据的配置中插入5行,设置好输入对象的类型和属性。然后在后面的测试数据中输入对 ...

yabest 发表于 2007-8-2 16:32:07

原帖由 loho1968 于 2007-8-2 15:34 发表 http://bbs.51testing.com/images/common/back.gif

假设你的脚本全部做好了。现在界面上增了加5个输入的内容,你打算怎么办?
我的办法很简单,打开框架配置的EXCLE,在输入数据的配置中插入5行,设置好输入对象的类型和属性。然后在后面的测试数据中输入对应的测试数据就OK了,各个过程不超过5分钟。
当然是基于对于我们的产品非常熟悉,一看界面就知道这5个对象是什么,不用使用对象库,也不用录制就知道它们的属性是什么。如果是新的对象,或者是不熟悉的对象,通过Object SPY功能查看,找到可以唯一识别的属性记下来。已经有网友自己编写了工具来自动识别对象,并生成自己的配置对象库(XML文件),这样,只需要在框架的配置文件中填写对象的名称就可以了。


我还是不明白你这样子做的意义!
用录制方式的话,我就启动录制,在5个输入内容里填入相应的值,然后停止录制,整个过程,半分钟都不到!简单、准确、直观!
你这样子,我越发觉得像是汇编、机器语言那样,算个简单的公式,也要繁琐的把数据从寄存器搬来搬去,累的半死又容易出错,何苦呢?


录制+修改+回放的做法,不是不好。而描述性编程也不是某些网友所说的是落后,应该是根据不同的使用人员,环境和目标,各取所需,不然,QTP就不会提供2种方法了。

我说的很清楚,QTP的描述性编程就像高级语言里支持的嵌入式汇编!
高级语言简单、高效、易读、不易出错,嵌入式汇编繁琐、复杂、难以阅读、容易出错!
在这样的环境里开发代码,大部分都使用高级语言,只有少数特殊的地方高级语言不好处理的,才用嵌入式汇编!

如果觉得高级语言太简单了没意思,或者功能不够强大,就通篇用嵌入式汇编来编码,并沉迷于汇编里直接操作硬件、控制一切的快感,
那就有点本末倒置、自找苦吃了!

QTP只是个工具而已,怎么简单,就怎么使用!不要执意把它玩的很高深,象写个茴字一定要研究出六种写法才罢休的样子!

[ 本帖最后由 yabest 于 2007-8-2 20:21 编辑 ]

loho1968 发表于 2007-8-3 12:41:03

为什么QTP还提供描述性编程呢?从官方的说明是:有些对象是动态创建的,没有办法录制。比如有根据操作创建多个页面,页面的标题就是“页1”、“页2”等等,这种情况下,录制就不能解决,就需要描述性编程了。

我认为,在windows环境内,语言没有高级、低级的区分,只有你能否掌握和使用得好。不是有人说VB是落后的语言吗?我们靠10几年靠编VB的程序养活了几百号人。

loho1968 发表于 2007-8-3 12:46:26

原帖由 jackymail 于 2007-8-2 16:26 发表 http://bbs.51testing.com/images/common/back.gif
就算描述性编程,qtp也一样要经过必要的判断步骤。
还有就是对象库里面的描述属性是可选的,你可以选择和你描述性编程使用一样的数量和属性。
你的5个元素修改过程在使用对象库的时候是一样的。
把对应的脚本 ...
》》yabest说的还是很有道理的。。。qtp在对象识别和获取上花了很大功夫。是重头戏。

QTP的对象识别,不是在对象库上,对象库只是一个管理工具而已。QTP对对象的识别和处理,关键在它对运行对象的识别和操作,而不是在于你是通过对象库,还是description对象来描述对象。
当然,使用对象库和KEYWORD视图确实很方便,通过鼠标操作,就可以设计自动化测试脚本。但实际应用中,不同的软件有不同的需求,再加上测试的业务流程的复杂程度不同,光靠鼠标是不能就会所有的情况的。
我不是反对录制+回放,而是认为不要太武断,除了对,就是错,应该区别情况对待。

jackymail 发表于 2007-8-3 12:52:11

QTP对对象的识别和处理,关键在它对运行对象的识别和操作

上面这句话我实在知识有限,无法理解。

对象的识别过程你可以看一下帮助。

关于描述性编程的作用帮助里面也有。

不武断是对的。但是要把正确的方法用到正确的时机,还有就是尽量陈述一些有价值的准确地文字,才对别人有参考意义,感谢讨论。

原帖由 loho1968 于 2007-8-3 12:46 发表 http://bbs.51testing.com/images/common/back.gif

》》yabest说的还是很有道理的。。。qtp在对象识别和获取上花了很大功夫。是重头戏。

QTP的对象识别,不是在对象库上,对象库只是一个管理工具而已。QTP对对象的识别和处理,关键在它对运行对象的识别和操 ...

loho1968 发表于 2007-8-3 13:20:52

原帖由 jackymail 于 2007-8-3 12:52 发表 http://bbs.51testing.com/images/common/back.gif
QTP对对象的识别和处理,关键在它对运行对象的识别和操作

上面这句话我实在知识有限,无法理解。

对象的识别过程你可以看一下帮助。

关于描述性编程的作用帮助里面也有。

不武断是对的。但是要把正 ...
>>QTP对对象的识别和处理,关键在它对运行对象的识别和操作
就是说,QTP可以识别更多的对象,可以对这些对象进行更多的操作,比如,WR对网页的支持就没有QTP好,但WR的对象管理与QTP的对象管理没有本质上的区别。重点不在对象库上面。而在对象库中的对象上面,比如支持智能识别,识别属性可以排序,支持多个相同对象的识别等。

其实,反而我觉得不论是QTP还是WR,把对象库保存为自己独有的格式反而不好,因为在对象库中维护对象有它不方便的地方。QTP9.2开始,已经支持导出和导入XML格式的对象库了。
单就对象识别技术而言,也不是很高深,论坛上有个网友就自己开发了一个程序,可以识别对象并记录为XML文档。

jackymail 发表于 2007-8-3 13:34:27

智能识别的基础就是对象库,没有对象库就先进行识别就不会启动智能识别。
排序也是在对象库中的排序。没有对象库不纯在排序识别。

还有其他的。。。所有的你提到的都是基于对象库才有的特性,没有对象库就没有那些特性。。
这是我最近研究的重点,如有偏颇,希望有高手出来指正。。。这个观点很重要哦
补充一下:举个例子就是在你使用描述性编程的时候,是绝对不会启动智能是别的,这是重点。

原帖由 loho1968 于 2007-8-3 13:20 发表 http://bbs.51testing.com/images/common/back.gif

>>QTP对对象的识别和处理,关键在它对运行对象的识别和操作
就是说,QTP可以识别更多的对象,可以对这些对象进行更多的操作,比如,WR对网页的支持就没有QTP好,但WR的对象管理与QTP的对象管理没有本质上的区 ...

[ 本帖最后由 jackymail 于 2007-8-3 13:36 编辑 ]

loho1968 发表于 2007-8-3 14:06:15

原帖由 jackymail 于 2007-8-3 13:34 发表 http://bbs.51testing.com/images/common/back.gif
智能识别的基础就是对象库,没有对象库就先进行识别就不会启动智能识别。
排序也是在对象库中的排序。没有对象库不纯在排序识别。

还有其他的。。。所有的你提到的都是基于对象库才有的特性,没有对象库就没 ...

>>智能识别的基础就是对象库,没有对象库就先进行识别就不会启动智能识别。

这个理解不正确,看下图


在设置Smart Identification时,针对的是某一类对象,比如vbwindow,winButton等,是设置QTP在识别对象时,先根据对象的什么属性来寻找对象(base filter properties),如果找到多个时,再根据补充的属性逐个来过滤(Option filter properties),直到找到唯一的对象。当然也可能还是有多个,这时就会出现错误。
这个智能识别与对象库没有直接的关系。从菜单上也可以看到,object identification是一个在tools下的独立菜单。

[ 本帖最后由 loho1968 于 2007-8-3 14:19 编辑 ]

jackymail 发表于 2007-8-3 14:19:23

你是不是没写完阿?
我在论坛里面开了2个帖子,一个介绍smart identifation
另一个介绍对象识别。被加红色的那个。

你可以先读一下,有不对的地方欢迎指明
建议先看一下帮助。帮助里面有完整地介绍。
原帖由 loho1968 于 2007-8-3 14:06 发表 http://bbs.51testing.com/images/common/back.gif


>>智能识别的基础就是对象库,没有对象库就先进行识别就不会启动智能识别。

智能识别,我理解如下
  1、Windows中多个对象,一个对象中多个属性。
对象的数量,再加上属性的数量非常巨大。

loho1968 发表于 2007-8-3 14:23:44

这是QTP9.2中生成的设置识别属性的脚本
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("abs_x")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("abs_y")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("checked")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("enabled")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("focused")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("height")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("hwnd")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("nativeclass")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("regexpwndtitle")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("text")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("vbname")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("vbname path")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("visible")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("width")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("window id")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("x")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("y")
App.Options.ObjectIdentification("vbradiobutton").OrdinalIdentifier = "location"
App.Options.ObjectIdentification("vbradiobutton").MandatoryProperties.RemoveAll()
App.Options.ObjectIdentification("vbradiobutton").MandatoryProperties.Add("nativeclass")
App.Options.ObjectIdentification("vbradiobutton").MandatoryProperties.Add("vbname")
App.Options.ObjectIdentification("vbradiobutton").AssistiveProperties.RemoveAll()
App.Options.ObjectIdentification("vbradiobutton").AssistiveProperties.Add("vbname path")
App.Options.ObjectIdentification("vbradiobutton").AssistiveProperties.Add("text")
App.Options.ObjectIdentification("vbradiobutton").AssistiveProperties.Add("window id")
App.Options.ObjectIdentification("vbradiobutton").EnableSmartIdentification = False
App.Options.ObjectIdentification("vbradiobutton").BaseFilterProperties.RemoveAll()
App.Options.ObjectIdentification("vbradiobutton").OptionalFilterProperties.RemoveAll()

loho1968 发表于 2007-8-3 14:30:20

QTP8.2中,关于智能识别的一段说明
了解智能标识进程
如果 QuickTest 在运行会话期间激活智能标识机制(原因是,它不能基于录制的描述标识对象),它将按照以下进程标识对象:

QuickTest“忘记”录制的测试对象描述,创建一个新的候选对象列表,该列表包含与基本筛选器属性列表中定义的所有属性匹配的对象(在该对象的父对象内)。
在该对象列表中,QuickTest 筛选任何与“可选筛选器属性”列表中列出的第一个属性不匹配的对象。其余对象成为新的候选对象列表。
QuickTest 计算新的候选对象列表:
如果新的候选对象列表仍然有多个对象,QuickTest 将使用新的(更小的)候选对象列表对列表中的下一个可选筛选器属性重复步骤 2。

如果新的候选对象列表为空,QuickTest 将忽略该可选筛选器属性,返回以前的候选者列表,对列表中的下一个可选筛选器属性重复步骤 2。

如果候选对象列表只包含一个对象,那么 QuickTest 认为它已标识该对象并执行包含该对象的语句。

QuickTest 继续在步骤 2 和 3 中描述的进程,直到它标识一个对象,或者没有可选筛选器属性可用。
智能标识删除进程完成后,如果 QuickTest 仍然不能标识对象,则 QuickTest 将使用录制的描述加上顺序标识符来标识对象。

如果组合的录制描述和顺序标识符不足以标识对象,则 QuickTest 将停止运行会话,并显示“运行错误”消息。有关“运行错误”消息的详细信息,请参阅 QuickTest 故障排除测试。

我的理解:对象库中记录了对象的属性,使用Descrtiption对象也“记录”(实际上设置了)对象的属性,都可以用于智能识别。

[ 本帖最后由 loho1968 于 2007-8-3 14:31 编辑 ]

jackymail 发表于 2007-8-3 15:05:36

if QT is unable to find any object that matches the learned objet description.orifit finds more than one object that fits the description,then qt ignores the learned description , and uses the Smart Identificaitoin mechanism to try to identify the object.

可能问题出自对这段话的理解。

不继续评论了,大家花的时间都太多了,先放一放,不说谁对谁错,等后来的人继续讨论。

原帖由 loho1968 于 2007-8-3 14:30 发表 http://bbs.51testing.com/images/common/back.gif
QTP8.2中,关于智能识别的一段说明
了解智能标识进程
如果 QuickTest 在运行会话期间激活智能标识机制(原因是,它不能基于录制的描述标识对象),它将按照以下进程标识对象:

QuickTest“忘记”录制的测 ...

yabest 发表于 2007-8-3 17:04:39

原帖由 loho1968 于 2007-8-3 12:41 发表 http://bbs.51testing.com/images/common/back.gif
我认为,在windows环境内,语言没有高级、低级的区分,只有你能否掌握和使用得好。不是有人说VB是落后的语言吗?我们靠10几年靠编VB的程序养活了几百号人


高级语言是专有名词,是相对汇编语言、机器语言而说的。不是普通意义上的高级和低级、先进和落后的意思。VB也是高级语言的。
高级语言屏蔽了很多底层硬件的琐碎繁杂的操作,给人带来极大的便利,所以编程时都是优先使用高级语言。
人们一般只有在特殊情况,受到硬件的限制不得不的情况下,才用汇编语言、机器语言来编程。
能用高级语言的地方不用高级语言,执意用汇编语言、机器语言,就是自找苦吃了!



QTP的对象识别,不是在对象库上,对象库只是一个管理工具而已。QTP对对象的识别和处理,关键在它对运行对象的识别和操作,而不是在于你是通过对象库,还是description对象来描述对象。
当然,使用对象库和KEYWORD视图确实很方便,通过鼠标操作,就可以设计自动化测试脚本。但实际应用中,不同的软件有不同的需求,再加上测试的业务流程的复杂程度不同,光靠鼠标是不能就会所有的情况的。
我不是反对录制+回放,而是认为不要太武断,除了对,就是错,应该区别情况对待。


“对象库” 比 “描述性编程” 简单方便,简单方便!!!
它们本质上没啥区别,识别对象的原理是一样的,但就是简单方便,所以QTP主要让大家用对象库。
除了动态对象外,大多数情况对象库都可以处理,跟是什么软件,是什么测试流程没啥关系!

jackymail 发表于 2007-8-6 10:44:46

这个功能9.0里面有没有阿。我怎么没见过啊。。指导一下啊
原帖由 loho1968 于 2007-8-3 14:23 发表 http://bbs.51testing.com/images/common/back.gif
这是QTP9.2中生成的设置识别属性的脚本
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.Add("abs_x")
App.Options.ObjectIdentification("vbradiobutton").AvailableProperties.A ...

loho1968 发表于 2007-8-6 11:22:56

原帖由 jackymail 于 2007-8-6 10:44 发表 http://bbs.51testing.com/images/common/back.gif
这个功能9.0里面有没有阿。我怎么没见过啊。。指导一下啊


9.0中有没有我不清楚,我使用的是9.2,在设置智能识别时,就有一个功能是输出为脚本。

jackymail 发表于 2007-8-6 11:26:11


原帖由 loho1968 于 2007-8-6 11:22 发表 http://bbs.51testing.com/images/common/back.gif


9.0中有没有我不清楚,我使用的是9.2,在设置智能识别时,就有一个功能是输出为脚本。

zitong 发表于 2007-8-10 16:13:55

好不容易才看完,真是一场激烈的讨论。收益了!

nedved1020 发表于 2007-8-10 17:24:46

终于看完了!!很漂亮的一场舌战!!受教了!

ppent 发表于 2007-8-10 22:33:50

对象库和描述性编程都是基于对象识别原理上的应用,两者在识别原理上是一致的,唯一的差别是对象库比描述性的对象识别多了一层封装,正如高级语言对于汇编语言。也正是如此,所以在使用上有信手拈来的感觉。
在应用技术上,关键字视图大大降低了用户的技术门槛,而相对来说,描述性编程灵活一些。
两者并非决然对立,而是相辅相成,共同构成了一个功能强大、有竞争力的工具。
最后引用魔兽世界中流行的一句话:没有垃圾的种族或职业,只有垃圾的玩家。大家体会一下这句话。sdlkfj2
页: 1 [2] 3 4 5 6 7
查看完整版本: 描述性编程VS 对象库