51Testing软件测试论坛

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

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 55614|回复: 92
打印 上一主题 下一主题

[原创] 在QTP中如何使用Class(类)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2007-8-4 23:03:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家知道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
'****************************************************************

[ 本帖最后由 songfun 于 2007-8-5 00:51 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

  • TA的每日心情
    开心
    2016-2-27 08:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]测试小兵

    2#
    发表于 2007-8-4 23:17:33 | 只看该作者
    不错,没有想到 VB 还有这么强的威力。周一上班时一定要好好实验一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3#
    发表于 2007-8-5 00:54:17 | 只看该作者
    越来越深入了,关键是感觉你思想越来越宽广了.有点深邃的味道了.呵呵!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4#
    发表于 2007-8-5 10:35:40 | 只看该作者
    能否介绍一下在实际运用中的例子?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

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

    使用道具 举报

    该用户从未签到

    6#
    发表于 2007-8-5 20:03:07 | 只看该作者
    8错8错的,面向对象方法还是很强的..
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7#
    发表于 2007-8-5 23:17:06 | 只看该作者
    宋老大说的封装思想在数据库中体现就是存储过程了
    这就是 OO 特点复用性。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8#
    发表于 2007-8-5 23:19:52 | 只看该作者

    回复 #5 songfun 的帖子

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

    使用道具 举报

    该用户从未签到

    9#
    发表于 2007-8-6 00:15:38 | 只看该作者
    不错。构造和析构函数不能带参数,property set and get需要变量名称类型一致,并且不能尽兴递归或者在function中声明。可以和function一样写在表达式的右侧。
    类中可以声明sub和function两种类型。。。。

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

    使用道具 举报

  • TA的每日心情
    无聊
    2015-3-12 14:20
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    10#
    发表于 2007-8-6 22:24:45 | 只看该作者
    恩,不错,发现新大陆了,呵呵
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11#
    发表于 2007-8-6 22:41:29 | 只看该作者
    “类里的数据,是相对于类实例(也就是,由类创建的每一对象)而独立存在的。也就是说,它存在于程序的存活期中”--这句话不太理解,上面的例子是否体现?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12#
    发表于 2007-8-7 11:44:37 | 只看该作者
    看到效果了
    很期待看到在QTP中的实际应用sdlkfj2
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    13#
    发表于 2007-8-9 15:52:47 | 只看该作者
    试过了  很好玩sdlkfj5
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14#
    发表于 2007-8-10 13:42:58 | 只看该作者
    是很有意思,但是还是不清楚具体怎么用
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    15#
    发表于 2007-8-10 14:02:14 | 只看该作者
    我总感觉qtp的代码复用功能不好用!
    例如:songfun 的这个类!
    如果我想在其它测试项目中将这个类进行继承呢?好象使用引用源代码,不用用组建方式!

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

    大家同样我的意见吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16#
    发表于 2007-8-10 14:25:03 | 只看该作者
    深奥,真需要好好学习编程
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17#
    发表于 2007-8-10 15:23:33 | 只看该作者
    努力!!!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    18#
    发表于 2007-8-11 20:14:26 | 只看该作者

    果然是强人

    原来……!嗯!果然是锋哥!
    继续努力。sdlkfj2
    我说我继续努力!!!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    19#
     楼主| 发表于 2007-8-11 21:39:31 | 只看该作者
    这位兄弟一定没有了解过QTP的function library sdlkfj5

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

    原帖由 kingdees 于 2007-8-10 14:02 发表
    我总感觉qtp的代码复用功能不好用!
    例如:songfun 的这个类!
    如果我想在其它测试项目中将这个类进行继承呢?好象使用引用源代码,不用用组建方式!

    在说VBS没有抽象类功能,无法对一些无法预先知道的类功能进行 ...
    回复 支持 反对

    使用道具 举报

    该用户从未签到

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

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

    [ 本帖最后由 kingdees 于 2007-8-12 14:29 编辑 ]
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

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

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

    GMT+8, 2024-11-25 23:08 , Processed in 0.080105 second(s), 28 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

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