ccmouse
发表于 2008-3-11 17:11:18
原帖由 yabest 于 2007-8-2 13:28 发表 http://bbs.51testing.com/images/common/back.gif
现在教育都产业化了,我也不能落伍啊!你看,这学费怎么算啊?!sdlkfj3
算我一个~~也愿意把第一个月的工资上交~~
yabest
发表于 2008-3-11 23:08:33
原帖由 ccmouse 于 2008-3-11 17:11 发表 http://bbs.51testing.com/images/common/back.gif
算我一个~~也愿意把第一个月的工资上交~~
我的银行帐号已经pm给你了,你寄过来吧,现在是优惠期,打95折:lol
flyfly310
发表于 2008-3-12 09:51:59
原帖由 yabest 于 2008-3-11 23:08 发表 http://bbs.51testing.com/images/common/back.gif
我的银行帐号已经pm给你了,你寄过来吧,现在是优惠期,打95折:lol
极力赞成yabest的方法!
很多人大面积使用描述性编程是因为他们对对象库不很了解,一遇到问题就觉得描述性编程可以解决,其实也未必,描述性编程也未必是高深的表现,白猫黑猫能抓住老鼠就是好猫
让那些喜欢玩弄技术不怕麻烦的多使用描述性编程吧,yabest给他们提供那么多省劲的方法他们反倒不领情,qtp给他们提供了那么宝贵的对象库,他们偏偏看不上。
yabest说话语气激烈,但字字珠玑!!!
鉴于最近跟yabest学习的人比较多,想报名的到我这里,我有黄牛票的!:loveliness:
yqx
发表于 2008-4-11 10:32:58
yabest 其实不用那么激动的,大家讨论而已,你之前的有些帖子有点人身攻击了,使用描述性编程和使用对象库都可以。看自己公司怎么用的,我们公司自动化做的还是很初级的,但是也使用描述性编程,有时候确实方便。
我只是说句公道话,不要攻击我哈:)
testman
发表于 2008-7-8 09:24:44
这个帖子很受用,谢谢大家的讨论
luckxiaot
发表于 2008-7-23 14:45:51
yabest 偶看看了回帖实在是。。。艾。
其实描述性编程的优点就是可以更好的做到脚本的共享,比如说我写个新增的校验,那其它人就可以调用我的代码。你用对象库可以做到么??你还不是要去录制然后修改再回放?
其实描述性编程和对象库各有各的优点,看你怎么做了。。但是如果一个项目去用对象库去处理,每个人都去录制脚本你觉得是不是效率很低啊。。
如果我用描述性编程搭好框架,其它人只要写少量的代码然后维护下EXCEL数据就可以了。。如果你还停留在录制、修改、回放你觉得你绝对是体会不到描述性编程的好处。。
还有,描述性编程是可以跨平台的,对象库可以么??若可以操作也是很麻烦的吧!!
两种方法各有各的优点。。没有必要那么激动,谁爱用啥就用啥。。。
[ 本帖最后由 luckxiaot 于 2008-7-23 14:47 编辑 ]
yabest
发表于 2008-7-23 18:00:30
原帖由 luckxiaot 于 2008-7-23 14:45 发表 http://bbs.51testing.com/images/common/back.gif
yabest 偶看看了回帖实在是。。。艾。
其实描述性编程的优点就是可以更好的做到脚本的共享,比如说我写个新增的校验,那其它人就可以调用我的代码。你用对象库可以做到么??你还不是要去录制然后修改再回放?
其实 ...
呵呵,不明白你的意思,好像你说的对象库都能做到。:)
hsjzfling
发表于 2008-7-24 10:38:08
原帖由 luckxiaot 于 2008-7-23 14:45 发表 http://bbs.51testing.com/images/common/back.gif
yabest 偶看看了回帖实在是。。。艾。
其实描述性编程的优点就是可以更好的做到脚本的共享,比如说我写个新增的校验,那其它人就可以调用我的代码。你用对象库可以做到么??你还不是要去录制然后修改再回放?
其实 ...
前两个月刚给一个项目做完一套比较完整的框架,包含主要的业务流程处理,大约有1%-2%左右的代码使用描述性编程,基本上都因为比较懒,针对单一代码行的修改懒得再跑到对应页面去重新录制过~~
对于luckxiaot的看法无法认同的~对象库的共享也很方便,在代码改动量大的情况下,录制->修改 比凭空写代码效率要高的多,维护的时候更是如此。新增或者修改某个业务模块,相对于使用描述性编程来说,用对象库只需要在改完后多上传个tsr文件而已,其它人一样能直接拿过去用。描述性编程能做到的,对象库基本都能照样做到~
使用Browser("xxx:xxx").Page("xxx:xxx").Link("xxx:xxx").Click等语句,写起来确实挺爽的,但这种语句一旦太多,用在长时间的回归测试或者系统验证的时候,比如要连续跑个几十个小时,那机器多半会崩溃,因为每一条描述性语句都是会申请新内存的,直到Test执行结束才释放。以前处理这种情况,不得不更改框架结构,把所有test case在一个Test中执行的方式修改为每个test case都得重新打开一个Test。用Description.Create来申请内存,可以即时来释放内存,但那样代码就得写疯了。。。
yabest
发表于 2008-7-24 11:33:02
自动化开发也是软件开发,软件开发最怕的就是冗余和杂乱!
对象库的思想就是将 测试脚本 和 对象描述 分离,每个对象只要在对象库里做一次描述就够了,所有对象的描述都放在对象库里统一管理,这种模式是最简单最清晰的。
不要在每行脚本里重复、冗余、分散的描述对象,这样很难管理和维护对象描述。
不要将对象描述和测试脚本混杂在一块,这样的测试脚本很杂乱,很难看的。
luckxiaot
发表于 2008-7-25 13:45:59
Function NeedInput(el_page,id_len)
Set dtSheet=GetGlobalSheet(TestDir&"\Data\InsertInfo.xls","Global")
For i =1 to V_NUM
dtSheet.SetCurrentRow(i) '获取当前行
get_text= DataTable.Value(el_page,"Global")
isStatus=DataTable.Value(el_page+"Status","Global")
codeNum=GetLen(get_text)'调用函数来获取其字符串长度
tszf=CheckTszf(get_text)'调用函数判断其是否含有特殊字符 返回值是 True 和 False;若含有特殊字符则返回True
Ifget_text="" ortszf="True"orcodeNum>id_len Then
browser("browser").page("page").Frame("name:=main").WebEdit("name:=" & el_page).Set get_text
browser("browser").page("page").Frame("name:=main").WebButton("name:=提交").Click
getStatus=replace(browser("browser").Dialog("text:=Microsoft Internet Explorer").Static("window id:=65535").GetROProperty("text"),vbcrlf,"")
IfisStatus=getStatus Then
browser("browser").Dialog("text:=Microsoft Internet Explorer").WinButton("text:=确定").Click
rep micPass,"提示信息" ,"提示信息 :"+getstatus+"正确"
else
QTP_Capture(TestDir&"\Pictures")
browser("browser").Dialog("text:=Microsoft Internet Explorer").WinButton("text:=确定").Click
rep micFail,"提示信息","提示信息:"+getStatus+"不正确"+vbcrlf+"正确的提示信息为:"+isStatus
End If
elseif codeNum>0 and codeNum<=id_len then
browser("browser").page("page").Frame("name:=main").WebEdit("name:=" & el_page).Set get_text
rep micPass,"录入信息" ,"录入信息 :"+get_text+"正确"
Exit for
End If
Next
ClsGSheet "dtSheet"
End Function
上边的代码是一个对输入域为必输项的一个校验,其中包括特殊字符和长度。。
整个系统只要用到这个校验的地方。。OK。。只要维护要EXCEL表就可以了。。。
这种东西都是个人喜好问题,。。当然我承认他运行的效率没有有对象库好。。但是他的优点也是毋庸置疑的。。
luckxiaot
发表于 2008-7-25 13:48:45
其实偶也挺笨的。。不知道在有对象库的时候如何搭建更好的框架。。
所以也请知道的朋友 讲解一下。。学习一下。。
yabest
发表于 2008-7-25 15:54:29
你这函数里涉及到的几个对象
browser("browser").page("page").Frame("name:=main").WebEdit("name:=" & el_page)
browser("browser").page("page").Frame("name:=main").WebButton("name:=提交")
browser("browser").Dialog("text:=Microsoft Internet Explorer").Static("window id:=65535")
browser("browser").Dialog("text:=Microsoft Internet Explorer").WinButton("text:=确定")
其中除了第一个WebEdit对象外,其他几个对象都没必要用描述性编程,你看改成下面的对象库方式后,脚本是不是好看太多了?
browser("browser").page("page").Frame("main").WebButton("提交")
browser("browser").Dialog("Microsoft Internet Explorer").Static("Dialog info")
browser("browser").Dialog("Microsoft Internet Explorer").WinButton("确定")
对第一个WebEdit对象,因为这个对象是不特定的,是泛指多个实际的WebEdit对象。
对于这种情况,用描述性编程也是合适的,但是对象库模式也一样能处理的。
具体你可以看我在《QTP识别和操作对象的原理》里所举的例子。
我那例子写得很详细的,相信你看了,也会知道怎么用对象库模式来实现你的函数。
luckxiaot
发表于 2008-7-25 17:59:07
你说的对。。是可以改,改后带来的效应是什么??
是你要把那个对象加入对象库,而我就不用了!不需要操作任何对象库就OK了。。
yabest
发表于 2008-7-25 18:31:29
定义常量干什么,你要弄个头文件,要定义常量,我不用!
我用到 pi 的时候,我就直接写3.1415926,我就直接写3.1415926!
用一百次pi,我就直接写一百次3.1415926就好了。
你看,不用定义常量,不用头文件,多方便!!
哪天需要把 pi 的值改为3.14,我就直接改代码好了,只要改一百处代码就好了。根本就不用改头文件,不用改常量。
虽然用常量和头文件时,只要改一处常量值,比改一百处代码少多了,但那也是太麻烦,反正维护头文件和常量定义总是比直接写代码麻烦的。
哪天别人要用我的代码,直接拷过去就好了,不需要拷我的头文件和常量定义,那多麻烦啊!
别人拷过去后,如需要把 pi 调整为3.1415,那他只要直接改代码,只要改一百处代码,根本就不要管什么头文件和常量定义,多好!
反对使用常量!反对使用头文件!
呵呵 :lol
[ 本帖最后由 yabest 于 2008-7-25 18:40 编辑 ]
tangxiaomei123
发表于 2009-3-9 18:04:41
:victory:
kasimxiao
发表于 2009-4-1 18:33:42
翻出了两年前的强帖,向前辈们拜服
free1998
发表于 2009-4-7 17:35:22
:victory: 很不错的帖子
Sands
发表于 2009-4-8 18:35:58
学习了,本人在项目里,刚刚苦苦的思索到底是用描述性编程,还是用对象。这个帖子提供了很好的建议
hsjzfling
发表于 2009-4-8 19:03:26
不用特意去怎么样,大家说的都是自己总结出来的经验。
在有足够多的时间和精力及兴趣的前提下,最好的办法就是自己多实践,各种方法都多尝试,然后就会慢慢知道什么情况下用什么方法最合适了
kaidong12
发表于 2009-8-18 10:05:33
haot受益匪浅