51Testing丛书连载:(五十六)精通QTP——自动化测试技术领航

发表于:2012-3-02 11:13

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:余杰 赵旭斌    来源:51Testing软件测试网

分享:

  分析:

  使用以上方法就可以达到永远只有一个实例对象,如果有创建,直接引用已创建的实例,如果没有创建,则直接创建一个,使oExcel 这个全局变量永远只有一个实例。但是这样写程序我们会发现一个问题,当在创建多个对象并将指针指向全局变量的这个实例时,我们都需要销毁这些对象,但是就算把这些对象全部销毁,全局变量的实例还是一直会持续下去,不会释放。因此,需要使用类进行包装来改善这种情况,实现如下所示:

Option Explicit 

Public oExcel '声明全局变量 

Class ExcelWrapper 

  Private oExcelObject 

    

  初始化类

  Private Sub Class_Initialize 

    Dim bAleadyInit '判断对象是否存在的标志位 

   '检查对象是否已经被初始化 

     bAlreadyInit = False 

     If IsObject(oExcel) = True Then 

        '对象初始化 

         If Not oExcel is Nothing Then 

            '激活状态 

             bAlreadyInit = True 

         End If 

     End If 

     '如果标志位是False,则创建一个实例对象 

           If bAlreadyInit = False then 

                     Set oExcel = CreateObject("Excel.Application") 

        end If

     Set oExcelObject = oExcel 

  End Sub 

  类销毁时退出Excel,并且释放Excel对象引用

  Private Sub Class_Terminate 

      oExcelObject.Quit 

     Set oExcelObject = Nothing 

  End Sub 

  Public Sub Open(oFileName) 

    '写入打开文件的代码 

    End Sub 

  Public Function GetSheetData(oSheet) 

    '写读取单元格的代码 

  End Sub 

  '********等等,可以写更多方法******* 

End Class

Set oExcelInstace = New ExcelWrapper 

oExcelInstace.Open("……")

  分析:

  以上脚本主要是为之前的步骤封装了一层类,以及对其类的初始化和销毁做了相应的处理,并加上了一些自定义的方法。这样,一个完美的单例模式就完成了。当创建ExcelWrapper这个类包装的时候就只会调用单个实例,在类销毁时,会自动销毁此全局变量的实例,这样就再也不会在进程里看到N多个Excel进程实例了。

  单例模式在QTP中的应用:

  在QTP中可以使用环境变量来代替,把之前的全局变量更改为环境变量作为对象。调用方法还是和原来的方法一样,代码如下所示:

Class ExcelWrapper 

     Private oExcelObject 

     Private Sub Class_Initialize 

     Dim bAleadyInit '判断对象是否存在的标志位

 

     On Error Resume Next 

     bAlreadyInit = IsObject(Environment("Excel_Object")) 

     '检查对象是否已经被初始化 

     

     If Err.Number <> 0 Then bAlreadyInit = False         

           On Error Goto 0 

     If bAlreadyInit = True Then 

       If Environment("Excel_Object"is Nothing Then bAlreadyInit = False 

     End If 

     If bAlreadyInit = False Then 

        Environment("Excel_Object") = CreateObject("Excel.Application"

     End If 

     Set oExcelObject = Environment("Excel_Object"

  End Sub 

  Private Sub Class_Terminate 

      oExcelObject.Quit 

      Set oExcelObject = Nothing 

  End Sub 

  Public Sub Open(sFileName) 

   '写入打开文件的代码 

  End Sub 

  Public Function GetSheetData(sSheet) 

   '写入读取单元格的代码 

  End Sub 

 '********等等,可以写更多方法******* 

End Class

  总结:

  单例模式可以帮助我们很好地管理对象的生命周期,使用它能够更好地帮我们集中对象的实体,更好地控制对象。后续会讲解更加强大的工厂设计模式来使脚本变得更加强大。

本文选自《51Testing软件测试作品系列》之九——《精通QTP——自动化测试技术领航》。

本站经人民邮电出版社和作者的授权,近期将进行部分章节的独家连载,敬请期待!

版权声明:51Testing软件测试网获人民邮电出版社和作者授权独家连载本书部分章节。

任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。

相关阅读:

查看本书介绍>>

查看本书更多试读章节连载>>

查看软件测试作品系列其他书籍>>

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号