51Testing软件测试论坛

标题: 利用对象库,如何组织编写脚本。 [打印本页]

作者: manhong    时间: 2009-6-2 18:10
标题: 利用对象库,如何组织编写脚本。
以前写的脚本都是用的描述性语言,没用到action。而是用class,在里面写function,然后调用function的方式。
现在想利用上对象库,不知道该如何组织?请高手们指教!  每个action都如何写?里面写哪些内容?还能用到3层模式吗?怎么用? 。。。还有一些不知道怎么问的!
还有就是如何编写脚本:是先把对象批量添加到对象库?然后手写代码? 对象库如何维护???
作者: Eric2515    时间: 2009-6-2 19:57
QTP的对象库好比我们人的大脑.你必须把对象添加在里面.不然即使有代码也无法运行。他的原理就是基于GUI界面的。
你可以使用录制的方法,会自动生成代码以及对象.手写的部分大多是用于处理数据的。
作者: manhong    时间: 2009-6-3 09:04
标题: 回复 2# 的帖子
感觉对象库算不上大脑。如果单纯为了呼吸而言,对象库是用鼻子呼吸;而描述性呼吸用的是嘴。。。呵呵
作者: xiaoyaoke    时间: 2009-6-3 09:46
标题: 回复 3# 的帖子
对象库是用鼻子呼吸;而描述性呼吸用的是嘴

抽象。。。
作者: dreamever    时间: 2009-6-3 12:03
我觉的描述性编程和对象库在作用上并无太大的区别,因为描述性编程的代码就算再复杂,它的作用也只有一个,就是返回一个测试对象;而对象库本身就是一个测试对象;
至于楼主问到的action如何写,写哪些内容,我看不出这跟是否使用测试对象库有什么关系。该怎么写就怎么写,只是当涉及到对象操作的时候,才有描述性编程或者测试对象库的区别;而至于3层模式,那是代码结构,跟是否使用测试对象库更没什么关系了,描述性编程可以用3层模式,测试对象库也一样可以用3层模式,只是实现上的细节会有不同而已。
第三个问题:是否先把对象批量添加到对象库,然后手写代码完全取决于你自己。方法是很多的,没有对错好坏之分,只有是否适合你的自动化测试的区别;
最后一个问题,对象库如何维护;首先楼主得先回答一个问题:你希望通过维护对象库能达到一个什么样的效果,不同的解决方案都针对特定的问题或满足特定的需求。比如说我们要解决多个脚本共享对象库的问题,那么我们就可以通过对象库增量合并的方式来进行维护;如果说要解决的问题不明确,别人怎么回答“对象库如何维护”的问题呢,最后只能来上一句:该怎么维护就怎么维护
作者: manhong    时间: 2009-6-3 12:45
十分感谢楼上的回答
我没用过对象库,以前的脚本都写在vbs里面,但现在要是用到对象库就要把脚本分别写在每个action中。不知道如何组织,要是按程序的模块划分,比如一个系统有2个模块,其中一个比较大而另一却很小,该怎么办?
另外对象库维护我还没有遇到具体的问题,等遇到了再说吧。
作者: dreamever    时间: 2009-6-3 13:14
模块大小和对象库如何使用没什么关系吧,那无非就是一个大的对象库,另一个是小的对象库了,只是根据自动化测试需要,你再来决定是不是要把两个对象库文件合并到一起。
而且我不明白为什么你说要用对象库就要把脚本分别写到每个action中呢?
作者: manhong    时间: 2009-6-3 13:54
原帖由 dreamever 于 2009-6-3 13:14 发表
而且我不明白为什么你说要用对象库就要把脚本 ...

因为我以前写的脚本都是放在一个vbs里,一个模块有一个主函数。
现在要用到对象库的话,就应该把每一个模块写到每一个action中?  还有就是按业务流程写脚本时会重复用到一些功能,而这些功能的脚本也用到了对象库,不能写入vbs,该怎么办?是单独写到一个action里做共享然后外部调用? 但感觉这样太麻烦了,工作量一定比用描述性大。有没有别的办法呢?

在论坛里看到很多老大都说对象库是精华,所以才想用的。但我的感觉如果都用描述性语言,也只是前期写脚本时麻烦一点,只要前期做的好,把所有输入数据和程序中的数据都定义好,后期维护也是很方便的。但用对象库就不一样了,不但要维护代码还要维护对象库,而且action过多的话文件夹会很多且文件路径会很深的。。。
作者: hk_ella    时间: 2009-6-3 14:12
标题: 回复 8# 的帖子
你想多了,没有这个必要
用到了对象库中对象的功能脚本当然可以写入vbs文件,譬如说写成function,然后在action中进行调用
只要在对应的action包含了function中用到的对象即可
作者: dreamever    时间: 2009-6-3 14:38
“现在要用到对象库的话,就应该把每一个模块写到每一个action中”,对于自动化测试来说,没有什么做法是应该或不应该的,只能说是不是适合。你可以这么做,也可以不这么做。
“而这些功能的脚本也用到了对象库,不能写入vbs,该怎么办”为什么不能写入?问题出在哪里?有报错信息的话,就把相关的信息和你写的代码也一起贴出来。
“是单独写到一个action里做共享然后外部调用”,同样,你怎么做没人管你,只要这种方法适合你,你就可以放心大胆的用。

你自己也说了,你感觉用对象库比用描述性编程麻烦,描述性编程维护简单,那你为什么还一定坚持要用对象库呢?
作者: manhong    时间: 2009-6-3 14:52
[[[“而这些功能的脚本也用到了对象库,不能写入vbs,该怎么办”为什么不能写入?问题出在哪里?有报错信息的话,就把相关的信息和你写的代码也一起贴出来。]]]
用到了对象库的代码把它写入vbs里当然要报错了,会找不到对象。。。

[[[你自己也说了,你感觉用对象库比用描述性编程麻烦,描述性编程维护简单,那你为什么还一定坚持要用对象库呢?]]]]
我就是想掌握一下用对象库的方法,自己有个思路。
还有前面几个问题,你一直说按照自己的想法做,但我感觉不能闭门造车,要看看别人是怎么做的,然后提取好的做法,(说到这你又会说了:“没有好的方法,只有适合你的方法!呵呵),说到底我就是想了解一下别人是怎么做的,自己参考一下。
作者: hsjzfling    时间: 2009-6-3 19:31
原帖由 manhong 于 2009-6-3 13:54 发表

因为我以前写的脚本都是放在一个vbs里,一个模块有一个主函数。
现在要用到对象库的话,就应该把每一个模块写到每一个action中?  还有就是按业务流程写脚本时会重复用到一些功能,而这些功能的脚本也用到了对象库 ...


不管用对象库还是用VBS,结构的划分上思路应该都是一样的。大家一般也都会把一些常用的模块做成Reuseable Action,而具体的划分上,可以根据业务的复杂程度,将一个模块定义为一个Action,或者将一个模块定义为一个Test,而将模块中的子功能或者子页面分别定义为一个Action,这样可以让经常使用到的模块、功能都可以很方便的被设计Test Case时的MainTest脚本来调用,能在很大程度上提高脚本的复用性。

LZ在描述想使用对象库的时候都用到了"写"这个字眼,事实上我们一般使用对象库都会先录制,再调试,真正要去"写"的东东会很少的,一般不会超过总代码量的15%,不会存在你想象中的那些麻烦。当然,如果你是打算将原描述性编程脚本改写成使用对象库,那工作量很可能别重新录制再修改要大很多。
作者: zhou840401    时间: 2009-6-3 20:20
采用对象库, 用vbs组织function,调用的时候,只需要把相应的对象库关联起来就行了.
作者: manhong    时间: 2009-6-3 22:36
标题: 回复 12# 的帖子
谢谢你的经验和方法
【【事实上我们一般使用对象库都会先录制,再调试,真正要去"写"的东东会很少的,】】
一般录制到对象库的对象会很杂乱,比如同一个browser再次录制后qtp会给它加一个“_1”的排序;还有 一个页面中webedit有多个并且属性相同,qtp加了index后有时回放会把webedit的位置搞错(当然这样的系统也是开发人员命名的不好),像这种情况怎么解决呢?  呵呵 我对象库用的少,最近只能试了一下发现了这个问题,请指教一二。。。
作者: manhong    时间: 2009-6-3 22:46
原帖由 zhou840401 于 2009-6-3 20:20 发表
采用对象库, 用vbs组织function,调用的时候,只需要把相应的对象库关联起来就行了.

那是不是要把脚本放到一个action里面?还是用分层模式,如果用分层得怎么分?告诉下方法,呵呵
作者: hsjzfling    时间: 2009-6-4 11:55
原帖由 manhong 于 2009-6-3 22:36 发表
谢谢你的经验和方法
【【事实上我们一般使用对象库都会先录制,再调试,真正要去"写"的东东会很少的,】】
一般录制到对象库的对象会很杂乱,比如同一个browser再次录制后qtp会给它加一个“_1”的排序; ...


<<比如同一个browser再次录制后qtp会给它加一个“_1”的排序
这个是很常见的问题,以前我也在51上回帖说过这个,只需修改下Tools->Web-> Page/Frame Options下的设置,两项都选Different test object discription即可

<<qtp加了index后有时回放会把webedit的位置搞错
一般多个同名对象且属性类似的对象可以用ChildObjects方法,或者直接通过Html中的父节点来确定对象,当然你也可以给该类对象加上强制识别属性这个问题你用描述性编程是如何来解决的,使用对象库也可以用同样的方法来解决。
作者: manhong    时间: 2009-6-4 14:44
【【这个是很常见的问题,以前我也在51上回帖说过这个,只需修改下Tools->Web-> Page/Frame Options下的设置,两项都选Different test object discription即可】】
这个设置我倒是知道,就是没具体用过,不知道效果好不好。会不会出现这个问题:一个页面有2个相同的属性的对象,这样设置后qtp只添加到对象库一个对象,结果回放导致找不到对象....

【【一般多个同名对象且属性类似的对象可以用ChildObjects方法,或者直接通过Html中的父节点来确定对象,当然你也可以给该类对象加上强制识别属性这个问题你用描述性编程是如何来解决的,使用对象库也可以用同样的方法来解决。】】
我的意思是通过操作对象库能不能解决这个问题,呵呵,感觉我有点转牛角尖。。
作者: hsjzfling    时间: 2009-6-4 17:09
标题: 回复 17# 的帖子
<<会不会出现这个问题:一个页面有2个相同的属性的对象,这样设置后qtp只添加到对象库一个对象,结果回放导致找不到对象....
这样设置的目的是不让QTP把同一个对象认为是多个对象,而不会去把多个不同对象认为是同一对象。设置之后只有当同一节点下出现同名对象而且对象识别属性完全相同时,QTP才会去给对象重命名为XXX_2,然后加上index进行区分。一般来说是不会出现这种情况的,这违背了一般开发的规范。
   
<<我的意思是通过操作对象库能不能解决这个问题
具体的问题要具体来分析,尽量选择最佳方案。我们的原则是什么方便就用什么。自动化的目的也是为了提高效率节省成本。


建议LZ先去多实践下,光问是问不出什么实质的东西的。




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