51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 32162|回复: 122
打印 上一主题 下一主题

[原创] 描述性编程VS 对象库

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-7-31 23:54:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
是先把所有要操作的对象添加到对象库里去,然后看着对象库里面对象的属性来写,写了以后删除对象库。
还是用spy一个一个去查找然后写?

有的人说对象库是精华,你们不用对象库,为什么?

我测试的软件。在主界面上能获取上千个对象,但是不能获取到子叶面的对象。然后具体到某个叶面也都有几十个上百个自己的对象。

我全部用的对象库。

或许可以把主叶面上的对象加入到对象库,子叶面里面的对象就用描述性编程好了,这样获取了主叶面对象以后就共享给所有人,用到子叶面的对象的时候就让相关负责的人用描述性编程。你说呢?

[ 本帖最后由 walker1020 于 2007-9-6 23:43 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2007-8-1 03:56:58 | 只看该作者

LZ真会偷懒!

QTP并不能识别所有的对象!
而且,对象库也占存储空间的。
还有,假如,对象变化了,难道你还要去对象库中修改对象的属性等等?到时候光修改对象就头痛死了,更别说改脚本啦。
还有……还有就是该睡觉了!

p.s.:照着对象库里的对象来做描述性编程,貌似“脱了裤子放屁”的说……sdlkfj3多此一举!LZ别怪我说话太直,我确实想不到其他词汇来形容你这个想法了!sdlkfj5

[ 本帖最后由 MarsNoNo 于 2007-8-1 04:00 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

3#
发表于 2007-8-1 08:28:56 | 只看该作者
描述性编程需要熟练掌握常用对象的基本特性,对于新手来说先通过对象库也不识为一种好办法,现在需求变更频繁,对象也多变,用描述性编程对脚本维护非常有利

[ 本帖最后由 walker1020 于 2007-8-15 23:30 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2007-8-1 10:48:07 | 只看该作者

你们楼上2个人怎么都在侃侃而谈?

你们到底是不是用spy一个一个去查找的。就一句话怎么都懒得回答呢。

就算用描述性编程,先收集到对象库以后看起来比较方便。再删除对象也没什么不可以,因为你无非是不想使用对象库。

还有你们知道对象库识别机制吗?需求变更频繁与对象库或者描述性编程一点关系都没有,准确地说描述性编程识别对象要更差一些!

何谓新手?

[ 本帖最后由 walker1020 于 2007-8-15 23:30 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2007-8-1 11:18:12 | 只看该作者
原帖由 MarsNoNo 于 2007-8-1 03:56 发表
QTP并不能识别所有的对象!
而且,对象库也占存储空间的。
还有,假如,对象变化了,难道你还要去对象库中修改对象的属性等等?到时候光修改对象就头痛死了,更别说改脚本啦。
还有……还有就是该睡觉了!
...



>>QTP并不能识别所有的对象!
  对象库和描述行编程识别对象的原理不一样的?!

>>而且,对象库也占存储空间的。
  这种理由,搞笑!

>>还有,假如,对象变化了,难道你还要去对象库中修改对象的属性等等?到时候光修改对象就头痛死了,更别说改脚本啦。
  是啊,一个对象在脚本里出现了几十上百上千处,对象变化了:
  用对象库只要修改一处地方,修改了直接HighLight一下验证是否正确,
  用描述行编程,你要修改几十上百上千处用到此对象的脚本!哪个让你头疼?
  别跟我说用属性变量,对象识别不是一个简单的属性变量可以囊括的!用属性变量简直是吃饱撑着、自找苦吃!
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2007-8-1 11:48:30 | 只看该作者
原帖由 zhong1984314 于 2007-8-1 08:28 发表
描述性编程需要熟练掌握常用对象的基本特性,对于新手来说先通过对象库也不识为一种好办法,现在需求变更平凡,对象也多变,用描述性编程对脚本维护非常有利


对象仓库就像高级语言,方便高效!
描述性编程就像汇编语言或机器语言,功能差不了多少,可那琐碎繁杂的程度,只会让人发疯!

QTP有别其他工具的一大特点,或者说是精华,就是使用对象仓库!就像高级语言一样,极大的简化了开发工作。
描述性编程只是作为某种补充的小分支技术,就像高级语言里支持嵌入式汇编一样。
在高级语言环境里少量使用嵌入式汇编是有好处的,但是通篇使用嵌入式汇编,只能说是吃饱了撑着!

如果为了显示自己是高手,那就尽情的用描述性编程吧!

[ 本帖最后由 yabest 于 2007-8-1 11:52 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2007-8-1 11:53:09 | 只看该作者
看你们的帖子太搞笑了sdlkfj3

一般情况能不用描述性编程就不要用,通过对象库识别对象的时间要远小于通过描述性编程找到对象的时间,执行效率要高的多。
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2007-8-1 11:57:56 | 只看该作者
sdlkfj2
回复 支持 反对

使用道具 举报

该用户从未签到

9#
 楼主| 发表于 2007-8-1 11:59:26 | 只看该作者

行了行了,开始总结了。

基本上除了运行期间重要属性会发生改变的对象是用描述性编程,其余的一律对象库。

用spy一个一个去查询然后写出一堆看似比较高深的却又不方便阅读和编写的的代码。。这种做法。。。不评论!
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2007-8-1 12:12:07 | 只看该作者
原帖由 sidneylover 于 2007-8-1 11:53 发表
看你们的帖子太搞笑了sdlkfj3

一般情况能不用描述性编程就不要用,通过对象库识别对象的时间要远小于通过描述性编程找到对象的时间,执行效率要高的多。



你是否有测试呢?时间真的快吗?

我认为2都的原理是一样的,通过描述对象的属性和类型,来识别对象。对于初学者,对象库确实是使用简单方便。但对象库维护不方便,如果使用描述性编程,对象有变化时,可以通过“查找”和“替换”来快速的修改对象的属性变化。如果再配合测试框架,或者是XML的方式来描述对象,甚至可以自己做一个适应于自己测试软件的对象管理功能。

比如:
set Main_window=desciption.create()
Main_window("vbname").value="frmBrower"
这2句就完成了一个对象的建立,需要使用时,直接就是 vbwindow(Main_window).active,非常方便。
如果将来"frmBrower"属性变了,一个查找替换就完成了调整,甚至可以通过自动工具来完成。

[ 本帖最后由 walker1020 于 2007-8-15 23:43 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2007-8-1 13:04:00 | 只看该作者
原帖由 loho1968 于 2007-8-1 12:12 发表



你是否有测试呢?时间真的快吗?

我认为2都的原理是一样的,通过描述对象的属性和类型,来识别对象。对象初学者,对象库确定使用简单方便。但对象库维护不方便,如果使用描述性编程,对象有变化时,可 ...



>>你是否有测试呢?时间真的快吗?
  这个应该无所谓吧

>>但对象库维护不方便,如果使用描述性编程,对象有变化时,可以通过“查找”和“替换”来快速的修改对象的属性变化。
  怎么维护不便啊, 我觉得对象仓库实在是太好用了!
  QTP给对象仓库可是做了很多非常方便的操作,通过对象仓库来管理对象特征属性,HightLight检验对象,
  点脚本里的某对象的右键菜单直接跳到它在对象库里的位置,写脚本时自动搜索对象库并提示下一级对象的名称。
  反正对象库的好处是说都说不尽!

>>如果再配合测试框架,或者是XML的方式来描述对象,甚至可以自己做一个适应于自己测试软件的对象管理功能。
  XML描述对象?又是吃饱撑着自找苦吃!

>>比如:
>>set Main_window=desciption.create()
>>Main_window("vbname").value="frmBrower"
>>这2句就完成了一个对象的建立,需要使用时,直接就是 vbwindow(Main_window).active,非常方便。
>>如果将来"frmBrower"属性变了,一个查找替换就完成了调整,甚至可以通过自动工具来完成。

  呵呵,相比起   Window("Main").active  这么简单直观好看的脚本,你这段代码简直是繁琐难看死了!
  就为了可以“查找”和“替换”来修改对象描述,就为了用XML代替对象仓库,你就这么折腾脚本,值得吗?!
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2007-8-1 22:12:18 | 只看该作者
呵呵,相比起   Window("Main").active  这么简单直观好看的脚本,你这段代码简直是繁琐难看死了!
  就为了可以“查找”和“替换”来修改对象描述,就为了用XML代替对象仓库,你就这么折腾脚本,值得吗?!
看看下面的脚本:
对象库:VbWindow("frmBrower").VbWindow("frmApparatusList").VbButton("∨ 从仪器项目列表中删除").Click
描述性编程:vbWindow(frmAppara).vbbutton(add).click
哪个更简洁?
描述性编程还有一个好处,就是支持通过框架和数据进行配置和设置式的自动化测试,而不是录制+修改+回放
回复 支持 反对

使用道具 举报

该用户从未签到

13#
 楼主| 发表于 2007-8-2 00:13:42 | 只看该作者

回复 #12 loho1968 的帖子

楼上的不对吧,你定义frmappara and add的代码呢?不用定义就能用啊??
定义以后关键属性发生改变你不用修改定义阿?
还有框架数据配置设置式的自动化测试。
框架就比较宏观了。数据配置我用对象库方法也作了,设置式的自动化测试不知道是什么名词。

数据配置:我把数据都拿到一个vbs里面去了。在test里面引入就好了,我没用datatable.

我觉得datatable可以放弃,对象库不能放弃。
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2007-8-2 02:35:05 | 只看该作者
原帖由 loho1968 于 2007-8-1 22:12 发表
看看下面的脚本:
对象库:VbWindow("frmBrower").VbWindow("frmApparatusList").VbButton("∨ 从仪器项目列表中删除").Click
描述性编程:vbWindow(frmAppara).vbbutton(add).click
哪个更简洁?
描述性编程还有一个好处,就是支持通过框架和数据进行配置和设置式的自动化测试,而不是录制+修改+回放


>描述性编程还有一个好处,就是支持通过框架和数据进行配置和设置式的自动化测试,而不是录制+修改+回放

  搞自动化的人,竟然排斥自动化,推崇自己手工写出每一行脚本(包括啥框架、配置方式的伪脚本),真是讽刺,而且这样子不累啊?
  视简单为低级,视复杂为高级,一定要把简单的东西复杂化,才甘心?!

  我做了这么多年的QTP,从来都是用 “录制+修改+封装+回放” 的方式!
  先录制取得初始脚本,再做简单的修改和参数化,再进行封装形成可重用的函数,最后回放调试,形成了最终的脚本。
  这样子开发,省去一个字符一个字符的写脚本,效率不知高了多少倍!而且全自动化,不怕会拼写错误!
  我简直无法想象,我这么多年写的QTP脚本,如果不用录制方式,而改用手工方式写,要多花上几倍的时间才能完成!!!

  框架?框架是要使开发工作更简单更高效!
  排斥录制方式,用手工写每一行脚本,在我看来,就是排斥高级语言,用汇编语言、机器语言来编程。
  厉害是挺厉害的,但却是吃饱撑着,自找苦吃

[ 本帖最后由 yabest 于 2007-8-2 13:08 编辑 ]
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2007-8-2 12:29:38 | 只看该作者
呵呵,best整天在这里吵个不停
反正我懒,还是录制好啦
回复 支持 反对

使用道具 举报

该用户从未签到

16#
 楼主| 发表于 2007-8-2 12:52:54 | 只看该作者
Yabest 收我为徒吧。。。。。。

原帖由 yabest 于 2007-8-2 02:35 发表


>描述性编程还有一个好处,就是支持通过框架和数据进行配置和设置式的自动化测试,而不是录制+修改+回放

  搞自动化的人,竟然排斥自动化,推崇自己手工写出每一行脚本(包括啥框架、配置方式的伪脚本) ...
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2007-8-2 13:26:50 | 只看该作者
原帖由 flyfly310 于 2007-8-2 12:29 发表
呵呵,best整天在这里吵个不停
反正我懒,还是录制好啦

我容易吗我sdlkfj8
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2007-8-2 13:28:46 | 只看该作者
原帖由 jackymail 于 2007-8-2 12:52 发表
Yabest 收我为徒吧。。。。。。



现在教育都产业化了,我也不能落伍啊!你看,这学费怎么算啊?!sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

19#
 楼主| 发表于 2007-8-2 13:52:51 | 只看该作者
等我学成出师,第一个月外快归您老。。。。
sdlkfj4
原帖由 yabest 于 2007-8-2 13:28 发表


现在教育都产业化了,我也不能落伍啊!你看,这学费怎么算啊?!sdlkfj3
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2007-8-2 15:34:45 | 只看该作者
原帖由 yabest 于 2007-8-2 02:35 发表


>描述性编程还有一个好处,就是支持通过框架和数据进行配置和设置式的自动化测试,而不是录制+修改+回放

  搞自动化的人,竟然排斥自动化,推崇自己手工写出每一行脚本(包括啥框架、配置方式的伪脚本) ...


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

下面一段是QTP自己生成的XML对象,只包括一个MSG窗口,窗口上有一个确定按钮。看看有多少内容,但实际上识别对象不需要这么多的内容。在你使用对象库时,虽然表面上没有代码,但实际上,QTP还是有很代码在对象库中搜索对象,根据对象的属性来创建对象。
- <qtpRep:ObjectRepository xmlns:qtpRep="http://www.mercury.com/qtp/ObjectRepository">
- <qtpRep:Objects>
- <qtpRep:Object Class="VbWindow" Name="frmBrower">
- <qtpRep:Properties>
- <qtpRep:Property Name="vbname" Hidden="0" ReadOnly="0" Type="STRING">
  <qtpRep:Value RegularExpression="0">frmBrower</qtpRep:Value>
  </qtpRep:Property>
- <qtpRep:Property Name="regexpwndtitle" Hidden="0" ReadOnly="0" Type="STRING">
  <qtpRep:Value RegularExpression="0">电子病历基础-中联医院信息系统</qtpRep:Value>
  </qtpRep:Property>
- <qtpRep:Property Name="nativeclass" Hidden="0" ReadOnly="0" Type="STRING">
  <qtpRep:Value RegularExpression="0">ThunderRT6FormDC</qtpRep:Value>
  </qtpRep:Property>
- <qtpRep:Property Name="is owned window" Hidden="0" ReadOnly="0" Type="BOOL">
  <qtpRep:Value RegularExpression="0">-1</qtpRep:Value>
  </qtpRep:Property>
- <qtpRep:Property Name="is child window" Hidden="0" ReadOnly="0" Type="BOOL">
  <qtpRep:Value RegularExpression="0">0</qtpRep:Value>
  </qtpRep:Property>
  </qtpRep:Properties>
- <qtpRep:BasicIdentification>
  <qtpRep:PropertyRef>vbname</qtpRep:PropertyRef>
  <qtpRep:PropertyRef>regexpwndtitle</qtpRep:PropertyRef>
  <qtpRep:PropertyRef>nativeclass</qtpRep:PropertyRef>
  <qtpRep:PropertyRef>is owned window</qtpRep:PropertyRef>
  <qtpRep:PropertyRef>is child window</qtpRep:PropertyRef>
  </qtpRep:BasicIdentification>
  <qtpRep:LastUpdateTime>2007年8月1日 22:46:48</qtpRep:LastUpdateTime>
- <qtpRep:ChildObjects>
- <qtpRep:Object Class="Dialog" Name="MS软件">
- <qtpRep:Properties>
- <qtpRep:Property Name="text" Hidden="0" ReadOnly="0" Type="STRING">
  <qtpRep:Value RegularExpression="0">MS软件</qtpRep:Value>
  </qtpRep:Property>
- <qtpRep:Property Name="nativeclass" Hidden="0" ReadOnly="0" Type="STRING">
  <qtpRep:Value RegularExpression="0">#32770</qtpRep:Value>
  </qtpRep:Property>
- <qtpRep:Property Name="is owned window" Hidden="0" ReadOnly="0" Type="BOOL">
  <qtpRep:Value RegularExpression="0">-1</qtpRep:Value>
  </qtpRep:Property>
- <qtpRep:Property Name="is child window" Hidden="0" ReadOnly="0" Type="BOOL">
  <qtpRep:Value RegularExpression="0">0</qtpRep:Value>
  </qtpRep:Property>
  </qtpRep:Properties>
- <qtpRep:BasicIdentification>
  <qtpRep:PropertyRef>text</qtpRep:PropertyRef>
  <qtpRep:PropertyRef>nativeclass</qtpRep:PropertyRef>
  <qtpRep:PropertyRef>is owned window</qtpRep:PropertyRef>
  <qtpRep:PropertyRef>is child window</qtpRep:PropertyRef>
  </qtpRep:BasicIdentification>
- <qtpRep:CustomReplay>
  <qtpRep:Behavior Name="simclass" Type="STRING">#32770</qtpRep:Behavior>
  </qtpRep:CustomReplay>
  <qtpRep:LastUpdateTime>2007年8月1日 22:46:48</qtpRep:LastUpdateTime>
  <qtpRep:ChildObjects />
  </qtpRep:Object>
  </qtpRep:ChildObjects>
  </qtpRep:Object>
  </qtpRep:Objects>
  <qtpRep:Parameters />
  <qtpRep:Metadata />
  </qtpRep:ObjectRepository>


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

[ 本帖最后由 loho1968 于 2007-8-2 15:42 编辑 ]
回复 支持 反对

使用道具 举报

本版积分规则

关闭

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

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

GMT+8, 2024-5-28 21:34 , Processed in 0.080052 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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