查看完整版本: 在QTP中如何使用Class(类)

songfun 2007-8-4 23:03

在QTP中如何使用Class(类)

大家知道VB是面向对象的,其中Class(类)是一个“模板”,对象是由它而创建的。类中的代码描述了从该类创建的对象的特性 (attribute) 和行为。
虽然Class(类)不是对象,但是它的确有定义其特性 (attribute) 的设计时属性 (property) 和定义其行为的事件。
类里的数据,是相对于类实例(也就是,由类创建的每一对象)而独立存在的。
也就是说,它存在于程序的存活期中;而类实例中的数据只存在于对象的存活期,它随对象的创建而创建,随对象的撤消而消失。
在编程的时候使用Class正是符合了OO(面向对象封装)的编程原则,我们在使用QTP进行自动化测试编程的时候也要时刻牢记这一原则,进行脚本设计。
然而,如何在QTP中使用Class呢,以下是本人写的一个在QTP中使用Class的例子,大家直接把它粘贴到QTP的Expert View中就能看到效果了:)


'****************************************************************
Call Test

Class Tester

        Dim mvarTesterName,mvarAge,mvarGender       
       
        Sub Class_Initialize   '构造函数
               MsgBox  "接下来,大家欢迎新同事的到来!"
        End Sub
       
        Sub Class_Terminate  '析构函数
                If mvarGender Then
                    MsgBox "很遗憾," & mvarTesterName & "先生脱离了测试行业!"
                Else
                    MsgBox "很遗憾," & mvarTesterName & "女士脱离了测试行业!"
                End If
        End Sub

        Sub Test(ByVal ProjectName)
                MsgBox mvarTesterName & "正在加班加点的测试" & ProjectName & "呢!"
        End Sub
       
        Sub Eat(ByVal food)
                MsgBox mvarTesterName & "正在吃" & food & "呢,好爽啊!"
        End Sub
       
        Property Let Gender(ByVal vData)
            mvarGender = vData            
        End Property
       
        Property Get Gender()
            Gender = mvarGender
        End Property
       
        Property Let Age(ByVal vData)
            mvarAge = vData
        End Property
       
        Property Get Age()
            Age = mvarAge
        End Property
       
        Property Let TesterName(ByVal vData)
            mvarTesterName = vData
        End Property
       
        Property Get TesterName()
            TesterName = mvarTesterName
        End Property
   
End Class



Sub Test()
        Set sb = New Tester  '创建一个对象,对象名叫somebody,它是由Tester创建出来的
        sb.TesterName = "songfun"
        sb.Age = 29
        sb.Gender = True
        sb.Eat "HagenDaz"
        sb.Test "手机"
        If sb.Gender Then
                MsgBox sb.TesterName & "先生年方" & sb.Age
   Else
                MsgBox sb.TesterName & "女士芳龄" & sb.Age
        End If
        Set sb = Nothing
End Sub
'****************************************************************

[[i] 本帖最后由 songfun 于 2007-8-5 00:51 编辑 [/i]]

walker1020 2007-8-4 23:17

不错,没有想到 VB 还有这么强的威力。周一上班时一定要好好实验一下

wssgily 2007-8-5 00:54

越来越深入了,关键是感觉你思想越来越宽广了.有点深邃的味道了.呵呵!

chenjie021 2007-8-5 10:35

能否介绍一下在实际运用中的例子?

songfun 2007-8-5 12:42

学过面向对象的人都会知道这种好处是显而易见的,我们可以封装很多咚咚到一个类里面,比如我们要操作数据库,每次都要写一段的代码去处理它,而针对数据库里的记录,又要有一段类似的代码去处理它,最后还要自己写代码断开连接,释放资源。一系列操作显得非常繁琐,如果我们把它封装到class里,那么借由它的构造函数、析构函数,以及配套的属性方法进行操作就会非常的方便了。。。

具体的例子我下次会再贴上一篇《在QTP中如何使用Class》续集sdlkfj6

Jimmyshao 2007-8-5 20:03

8错8错的,面向对象方法还是很强的..

v_v 2007-8-5 23:17

宋老大说的封装思想在数据库中体现就是存储过程了
这就是 OO 特点复用性。

v_v 2007-8-5 23:19

回复 #5 songfun 的帖子

期待续集。。。呵呵
songfun老师怎么编程这么厉害的,学了多久了啊?
哎。。。。。。程序牛差的我羡慕。sdlkfj8

jackymail 2007-8-6 00:15

不错。构造和析构函数不能带参数,property set and get需要变量名称类型一致,并且不能尽兴递归或者在function中声明。可以和function一样写在表达式的右侧。
类中可以声明sub和function两种类型。。。。

vb要是复杂起来真的还不如不用。。。。用它就是因为他简单。。简单就不够灵活。。。灵活了就比较复杂。。。看你怎么用了。。不过vb用class感觉除非很必要的情况。

marco 2007-8-6 22:24

恩,不错,发现新大陆了,呵呵

ppent 2007-8-6 22:41

“类里的数据,是相对于类实例(也就是,由类创建的每一对象)而独立存在的。也就是说,它存在于程序的存活期中”--这句话不太理解,上面的例子是否体现?

xishuai0328 2007-8-7 11:44

看到效果了
很期待看到在QTP中的实际应用sdlkfj2

海市蜃楼51 2007-8-9 15:52

试过了  很好玩sdlkfj5

molly-cici 2007-8-10 13:42

是很有意思,但是还是不清楚具体怎么用

kingdees 2007-8-10 14:02

我总感觉qtp的代码复用功能不好用!
例如:songfun 的这个类!
如果我想在其它测试项目中将这个类进行继承呢?好象使用引用源代码,不用用组建方式!

在说VBS没有抽象类功能,无法对一些无法预先知道的类功能进行扩展!
测试工程在设计初期不好使用UML进行建摸,导致测试成本增加!

大家同样我的意见吗?

小鱼oO 2007-8-10 14:25

深奥,真需要好好学习编程

kingdees 2007-8-10 15:23

努力!!!!

MarsNoNo 2007-8-11 20:14

果然是强人

原来……!嗯!果然是锋哥!
继续努力。sdlkfj2
我说我继续努力!!!!

songfun 2007-8-11 21:39

这位兄弟一定没有了解过QTP的function library sdlkfj5

你想要实现的东西对QTP来说轻而易举——就看你怎么使用了:)

[quote]原帖由 [i]kingdees[/i] 于 2007-8-10 14:02 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=653263&ptid=85572][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
我总感觉qtp的代码复用功能不好用!
例如:songfun 的这个类!
如果我想在其它测试项目中将这个类进行继承呢?好象使用引用源代码,不用用组建方式!

在说VBS没有抽象类功能,无法对一些无法预先知道的类功能进行 ... [/quote]

kingdees 2007-8-12 14:24

我公司有个人用了5年QTP,他和我讨论过,的确QTP的function librar可以做到代码重用!也可以轻而实现!
但是重用效果不理想, 无法实现在类被继承了N次后不修最原始代码实现需要的新功能!
他的做法是从如果新的测试需求就将代码COPY一份,然后修改!(我指的是测试框架!不是具体实现)

写出好的测试框架在易用性,高度扩展性,高度重用性有很高的要求,我公司的产品特别庞大,涉及的面很广!每次测试时需要大量的人力去修改测试代码,最后总发现原来设计的测试框架扩张性差,导致成本增加!
不是只要可以实现就行了!有谁有这方面的经历吗?

[[i] 本帖最后由 kingdees 于 2007-8-12 14:29 编辑 [/i]]

huash 2007-8-12 18:35

真是太好了,收下了,谢谢!

songfun 2007-8-12 23:27

呵呵,02年就开始用QTP了,比我早多了,原来是个测试界前辈,瞻仰瞻仰(据本人斗胆猜测,兄台也是一位前辈,冒昧之处多多包涵 ) sdlkfj1
貌似02年才刚刚出现QTP第一个版本5.5吧?而当时国内能有几家公司做到自动化的这个程度了——我真的很惊奇,看来兄台一定有在外企工作的经验,说不定还是个CTO、架构设计总工程师。既然在班门之前,我也不敢弄斧了,以下只能说说我的个人看法:
其实框架的复用确实是很重要的一个方面,但是就本质原因而言,重用效果不理想真的只是框架设计自身的问题吗?sdlkfj6
产品大和涉及面广确实是一方面的原因,不过到底框架是要起什么样的作用其实很多人不明白(唔,我承认我也不明白,真希望得到前辈们的指点sdlkfj1 )。
自动化测试在国外的公司里,本身是被作为一个项目来进行的(听在外企工作的朋友这么说过),有成熟配套的自动化测试的项目经理、自动化测试流程、自动化测试计划……诸如此类。而我们呢,现在都是怎么做的?恐怕很多人只知道拿到一个系统,就立刻开始录制、编辑脚本、回放……
所以,如果靠个别高手去做框架设计,而没有从需求管理、变更管理、开发过程等方面的角度去介入,那“导致成本增加”也是在所难免了的。
总的来说,赞同你的观点,“不是只要可以实现就行了”,技术如果不能为应用而服务,那么终究要消亡的。测试在国内刚起步没几年,很多东西都在摸索阶段,能有相关经历的人少之又少(何况高手都很低调,恐怕不会轻易在论坛抛头露面),底蕴不足带来的任何现状都需要时间来填补的。包括Automation Framework在内。
所以需要大家多多交流,才能进步的更快。


[quote]原帖由 [i]kingdees[/i] 于 2007-8-12 14:24 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=655521&ptid=85572][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
我公司有个人用了5年QTP,他和我讨论过,的确QTP的function librar可以做到代码重用!也可以轻而实现!
但是重用效果不理想, 无法实现在类被继承了N次后不修最原始代码实现需要的新功能!
他的做法是从如果新的测试需求就将代码COPY一份,然后修改!(我指的是测试框架!不是具体实现)

写出好的测试框架在易用性,高度扩展性,高度重用性有很高的要求,我公司的产品特别庞大,涉及的面很广!每次测试时需要大量的人力去修改测试代码,最后总发现原来设计的测试框架扩张性差,导致成本增加!
不是只要可以实现就行了!有谁有这方面的经历吗?
[/quote]

[[i] 本帖最后由 songfun 于 2007-8-12 23:36 编辑 [/i]]

kingdees 2007-8-13 09:14

鄙人不才,让这位兄台见笑了:的确鄙人在国外工作了一段时间,国内工作过一段时间!
兄台尊称我为测试前辈,不敢当!我很少做具体的测试工作,大部分时间是研究开发平台,做编译器!
只是公司有个做测试的专家经常找我探讨问题,我有了解,开发和测试有相通的地方!
不过现在我们已经自己开发了一套测试工具,直接用使用JAVA语言编码,不用QTP了!

至于兄台说:"何况高手都很低调,恐怕不会轻易在论坛抛头露面",这就每个人的做人心态了!
在国外时我也经常喜欢和一些刚入行的人进行问题的讨论,我发现每次都有新的东西获得!
不瞒你说,我公司有个干了30年的程序员就经常和我讨论中国的道教思想!其实世界万物相通!
我经常会将一些新的研究项目交给一些刚毕业的研究生,甚至本科毕业生!我感觉他们做的不比
那些干的几年的差,并且创新能力很强!

在国外的公司等级不象国内明显!我也经常和李开复博士有邮件往来~!他从来没有什么好象不屑
和我交流的态度,每次都是很详细的回答我提出的问题!我最佩服李博士是他的做人非常成功,而不仅仅是技术大师!

[[i] 本帖最后由 kingdees 于 2007-8-13 09:52 编辑 [/i]]

kingdees 2007-8-13 09:18

还有,兄台无需称什么前辈后辈的,如果是这样的话跟企业是一样的!
高手也是人,也要食五谷杂粮,并非个个都很古怪,有的话只是个人个性而已,
和他们相处的时候只要将胸怀放大还是很好交流的!
不卑不亢,不要小看自己,也要尊重别人,是最好的心态!慢慢的大家都成了高手!
我只是抛砖引玉!强中自有强中手,一山还有一山高!我见过的高人太多,各个领域都有,
人只有将胸怀放大才能得到别人的尊重!
我上论坛无非是为了放松一下,和大家说说话!有得罪的地方请谅解!

[[i] 本帖最后由 kingdees 于 2007-8-13 09:39 编辑 [/i]]

songfun 2007-8-13 13:24

兄台说的句句在理,受教受教。
看的出兄台是位性情中人(感叹号用了这么多sdlkfj3 ),没想到我们的QTP话题就这么谈到了人生道理上了,其实我只是就QTP论QTP而已,暂时没想过去讨论人生大道理(觉悟不够,惭愧惭愧)。

不过我的回复除了尊称你为前辈之外好像没有表示出谦卑或是怎么样的意思吧sdlkfj2 (顶多就是客气了些)
我回复你的帖子应该和“胸怀放大”也没什么联系吧,呵呵 (连“得罪”这样的词都用上了,有些夸张sdlkfj6 )
至于您所说的“国外的公司等级不象国内明显……他从来没有什么好象不屑和我交流的态度……”,本人没在外企呆过,没有资格评论,但是耳闻目睹的国内公司似乎也没什么明显的等级制吧(您形容的有些阴森恐怖了~~)?更没遇到过有什么人会“不屑和我交流”——也许是我的经历少,惭愧惭愧。

不过你这样的评论留在我的blog里挺不错,呵呵

[quote]原帖由 [i]kingdees[/i] 于 2007-8-13 09:18 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=656366&ptid=85572][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
鄙人不才,让这位兄台见笑了:的确鄙人在国外工作了一段时间,国内工作过一段时间!
兄台尊称我为测试前辈,不敢当!我很少做具体的测试工作,大部分时间是研究开发平台,做编译器!
只是公司有个做测试的专家经常找我探讨问题,我有了解,开发和测试有相通的地方!
不过现在我们已经自己开发了一套测试工具,直接用使用JAVA语言编码,不用QTP了!

至于兄台说:"何况高手都很低调,恐怕不会轻易在论坛抛头露面",这就每个人的做人心态了!
在国外时我也经常喜欢和一些刚入行的人进行问题的讨论,我发现每次都有新的东西获得!
不瞒你说,我公司有个干了30年的程序员就经常和我讨论中国的道教思想!其实世界万物相通!
我经常会将一些新的研究项目交给一些刚毕业的研究生,甚至本科毕业生!我感觉他们做的不比
那些干的几年的差,并且创新能力很强!

在国外的公司等级不象国内明显!我也经常和李开复博士有邮件往来~!他从来没有什么好象不屑
和我交流的态度,每次都是很详细的回答我提出的问题!我最佩服李博士是他的做人非常成功,而不仅仅是技术大师!

还有,兄台无需称什么前辈后辈的,如果是这样的话跟企业是一样的!
高手也是人,也要食五谷杂粮,并非个个都很古怪,有的话只是个人个性而已,
和他们相处的时候只要将胸怀放大还是很好交流的!
不卑不亢,不要小看自己,也要尊重别人,是最好的心态!慢慢的大家都成了高手!
我只是抛砖引玉!强中自有强中手,一山还有一山高!我见过的高人太多,各个领域都有,
人只有将胸怀放大才能得到别人的尊重!
我上论坛无非是为了放松一下,和大家说说话!有得罪的地方请谅解!
[/quote]

[[i] 本帖最后由 songfun 于 2007-8-14 02:20 编辑 [/i]]

virgozz 2007-8-13 14:56

老实说呢QTP这东西就是一通用化的产品,既然是产品级别而不是项目的东东对应个别公司的测试框架或者理想中的测试框架应该是毫无针对性的(产品的功能定制需要额外费用),而泛型的设计和简易的实现才是它的最大卖点.在我个人看来通用性和针对性始终不大可能调和,QTP做为通用的工具,自是不大可能在具体领域有所涉及.

[[i] 本帖最后由 virgozz 于 2007-8-13 15:01 编辑 [/i]]

nancofung 2007-8-14 16:12

就企业文化而言,感觉kingder兄說的還是有道理的

xiao* 2007-8-15 16:22

说的好,收下了:)

EdmondYe 2007-8-16 10:19

[quote]原帖由 [i]kingdees[/i] 于 2007-8-12 14:24 发表 [url=http://bbs.51testing.com/redirect.php?goto=findpost&pid=655521&ptid=85572][img]http://bbs.51testing.com/images/common/back.gif[/img][/url]
我公司有个人用了5年QTP,他和我讨论过,的确QTP的function librar可以做到代码重用!也可以轻而实现!
但是重用效果不理想, 无法实现在类被继承了N次后不修最原始代码实现需要的新功能!
他的做法是从如果新的测试 ... [/quote]

潜水很久,说点吧.呵呵.kingdees跟我的工作经历有点类似呀,我们公司的产品也很复杂,前台,后台,辅助部分的等等,为了满足TA的要求我们也开发了一个框架(一部分是自己写的,一部分是利用开源的)把公司现有的测试工具,因为产品涉及范围比较广,所以测试工具也比较多,QTP在公司现有的框架中只是作为前台TA的一个测试入口,底层采用的是一个开源工具,这样,多个测试工具之间可以通过底层平台来交换data和获得各种各样的services,用来代替部分手工测试部分.在QTP中,我们也做了不少代码重用,你说的"无法实现在类被继承了N次后不修最原始代码实现需要的新功能",要看产品的复杂程度和新功能和被测难度了,至少到目前为止,我们的基类还没有需要修改,可能是你们的产品的复杂程度超出了我的想象,呵呵.其实基类被修改,比如需要在里面增加新的function来完成新的功能,对于其它的继承类也应该不会有什么影响吧无非就是多继承了个新的function.我想这种情况应该不是很多,如果多的话,那基类的设计就应该有些小问题了.因为基类的设计当初只是满足一定阶段内产品的测试的吗.谁也不会预见到以后公司产品会有什么变化,毕竟市场指导产品嘛.所以有点修改也是再所难免的.不要指望不做修改,楼主可能也是个完美主义者.呵呵.
说说我们在TA function library里面设计吧.,尽量的最小单元化或者原子化(根据产品的不同,可能有所不一样,我们的产品是可以进行分割的.),形成最小单元,这些最小单元都可以完成一个action或者function,一些相关的最小单元可以进行组合来完成一个大的功能,这个组合可以事先写好,也可以在用单独的XML脚本进行组织,进行分层设计,并且实现数据剥离等,最小单元的组合是用XML实现的,QA可以自己去写.在出现新功能的时候去增加和完善他们自己的library.最终去执行TA的就是一个XML控制脚本,用它来负责和协调整个case的运行,负责测试环境准备,加加载数据,组织function,出错处理等等,这种方法目前实现的效果还不错.

[[i] 本帖最后由 EdmondYe 于 2007-8-20 09:11 编辑 [/i]]

hmilymm 2007-8-20 11:44

牛人好多啊

llytaiyang 2007-8-30 17:46

来的还不算晚~~牛人大把!赶紧学习~~
想请教下如何突破QTP的学习瓶颈呀!老是停留在初始水平,没甚么进展~~
非常郁闷呀!
那位前辈有好的建议呀

mtang008 2007-9-12 17:44

顶``谢谢了`收获多多``

htot05 2007-9-21 14:42

站在不同的高度, 看的问题也不一样, 慢慢提升吧~~

zhanqiao123 2007-9-24 16:34

才感觉QTP那么好使啊,原来懂得真是皮毛,又让自己眼界开阔了好多,继续学习中……

hairet 2007-10-8 15:50

因为容易上手,所以才会普及。。。进化吧……

mirro30 2007-10-31 14:34

学习

xiaodong 2007-11-5 14:57

好像有人说过他从没用过QTP.怎么会摇身一变成了高手了呢?难道练了九阳神功和乾坤大挪移?

wzdoxu 2007-11-13 15:01

牛人还不少啊,开开眼界!

pxwcypx 2007-11-15 12:08

:lol heh,羡慕和学习啊

lilei6322721 2007-11-16 11:20

怎么说呢,向往正规的大公司,但需要从现在的工作岗位扎实的干起
页: [1] 2
查看完整版本: 在QTP中如何使用Class(类)