揭秘QTP保留对象机制

注:本文最早发表于51testing

揭秘 QTP 保留对象机制

QTP 的帮助文档中,介绍了通过 Dictionary 对象来在 Action 之间共享数据的方法,就是在注册表中添加一个保留对象( reserved object ),例如“ GlobalDictionary ”,把 Dictionary 对象作为环境变量来使用,可以在多个 Action 之间共享数据。文档中仅介绍了如何在注册表中添加这个对象的注册信息,实际上还可以设置更多的注册信息,让添加的保留对象更好用、更强大。

本文将深入探索 QTP 的保留对象机制,以及如何利用 QTP 的保留对象机制来简化测试脚本的编写工作。

什么是保留对象?

QTP 自动化测试脚本编写过程中,我们通常会使用 QTP 提供的一些函数或对象,例如帮助文档中列出的 Utility 中的对象:

Crypt Object

DataTable Object

Description Object

DotNetFactory Object

DTParameter Object

DTSheet Object

Environment Object

Extern Object

LocalParameter Object

MercuryTimers Object (Collection)

MercuryTimer Object

Parameter Object

PathFinder Object

Properties Object (Collection)

QCUtil Object

RandomNumber Object

Recovery Object

Reporter Object

RepositoriesCollection Object

Repository Object

Services Object

Setting Object

TextUtil Object

TSLTest Object

XMLUtil Object

这些都是 QTP 的保留对象,或者称之为“内置对象”,它们封装了各种常用的函数,对于简化测试脚本的编写起到很大的作用,例如使用 DotNetFactory 这个保留对象就可以方便地访问、创建和使用 .NET 的对象,下面是一个小例子,用于创建 .NET Form 窗体对象,显示一段时间后关闭:

Set var_CreateInstance = DotNetFactory.CreateInstance("System.Windows.Forms.Form", "System.Windows.Forms")

var_CreateInstance.Show

wait 2

var_CreateInstance.Close

注册自定义保留对象

按照 QTP 的帮助文档的提示,我们可以通过修改注册表的方式来添加自定义的保留对象。例如,添加 Dictionary 保留对象的方法如下:

1 打开注册表,定位到下面注册项:

HKEY_CURRENT_USER/Software/Mercury Interactive/QuickTest Professional/MicTest/ReservedObjects

实际上,从该注册项所包含的子项可以看到, QTP 的常用保留对象都列在这里了,例如: DataTable DotNetFactory Environment 等。而我们要做的是把一些自定义的保留对象添加进去。

2 )添加一个名为“ GlobalDictionary ”的注册项,如图所示:

3 )然后添加两个“ REG_SZ ”类型的注册项,分别是:

ProgID :准备创建的 COM 对象的 ID ,在这里就是 Dictionary 对象所对应的 COM 对象名“ Scripting.Dictionary ”。

UIName QTP 中指向保留对象的名字,在这里输入“ GlobalDictionary ”。

4 )然后再添加一个类型为“ REG_DWORD ”的注册项:

VisibleMode :设置 DWORD 值为 2 ,用于控制自动完成( auto-complete )和代码智能感知( intelligence )。

使用自定义保留对象

    做完这些设置后,重新启动 QTP ,进入关键字视图,添加测试步骤,在“ Step Generator ”中可以选择“ Utility Objects ”,然后选择已注册的“ GlobalDictionary ”以及其中的各种方法。

    例如,我们可以选择 Dictionary 对象的 Add 方法,在参数( Arguments )中输入 Key Item 的值。单击“ OK ”,然后在关键字视图中就可以看到新添加的步骤包含的对象:

    在专家视图中也可以使用该对象,并且输入对象名,加点号后可以自动弹出对象的方法和属性列表。下面是一个使用 GlobalDictionary 对象的例子:

' 使用 GlobalDictionary 前清空里面的数据

If  GlobalDictionary.Count > 0  Then

       GlobalDictionary.RemoveAll

End If

' 存储一个数值

DepartDate = " 2008-3-31 "

GlobalDictionary.Add "DateCheck", DepartDate

   

    使用 GlobalDictionary 添加数据后,可在当前 Action 使用 GlobalDictionary 中的数据,也可在另外一个 Action 中使用添加到 GlobalDictionary 的数据,下面脚本从 GlobalDictionary 中读取数据:

Dim CompareDate

CompareDate=GlobalDictionary("DateCheck")

Msgbox CompareDate

探秘 QTP 保留对象注册信息

   查看注册表的其它保留对象的信息可知,还有很多其它的项和值可以添加和设置,例如在 Icons 项中设置对象的图标。

查看 DataTable 对象的 Icons 注册项可看到,图标的数据指向: D:/Program Files/HP/QuickTest Professional/bin/MicParam.dll 这个文件。

VisualStudio.NET 2005 打开这个 DLL 可看到 Icon 的信息:

双击可打开图标编辑器查看 Icon 的详细信息,例如打开名为“ 135 ”的 Icon ,可看到如图所示的图标。

    这正是我们通常在 QTP 的步骤产生器( Step Generator )或关键字视图中看到的 DataTable 对象的图标。

    因此,我们也可以为自定义的 GlobalDictionary 对象添加一个图标,方法如下:

    1 )在注册表中的 GlobalDictionary 项下添加名为“ Icons ”的注册项。

2 )修改默认值,输入包含图标资源的 DLL 所在的文件路径,例如“ D:/Program Files/HP/QuickTest Professional/bin/AQTProductInfo.dll ”,并且在后面添加指定哪个 Icon ,完整的注册项的值为:

D:/Program Files/HP/QuickTest Professional/bin/AQTProductInfo.dll,204,204

    3 )重新启动 QTP 后,在关键字视图就可以看到 GlobalDictionary 对象的图标已经发生了变化,不再是默认的图标,而是指定 DLL 所包含的图标:

使用自定义保留对象来简化代码编写工作

    保留对象( Reserved Objects )的机制是 QTP 用于创建单件 COM 对象的内部机制,可以让脚本的编写更加简单。例如,如果不用保留对象的机制,则在 QTP 中使用 Excel 需要按下面代码来实现:

Dim oSheet,arrRange

' 创建 Excel 应用程序对象

Set oExcel = CreateObject("Excel.Application")

' 打开 Excel 文件

oExcel.Workbooks.Open("D:/QTP/MyWork/ReadExcelFileTest1/ObjectTree.xls")

' 获取表格的使用范围

Set oSheet = oExcel.Worksheets("Tree").UsedRange

' 获取从 A 列到 Z 列,从第 1 行到第 1000 行的范围中的所有值

Set oRange = oSheet.Range("A1:Z1000")

' Excel 数据转换到数组

arrRange = oRange.Value

' 关闭工作簿

oExcel.WorkBooks.Item(1).Close

' 退出 Excel

oExcel.Quit

Set oExcel = Nothing

Msgbox arrRange(3,1)

    可看到,脚本中需要使用 CreateObject 方法,首先创建名为“ Excel.Application ”的 COM 对象,然后才能使用这个 Excel 中的属性和方法。而如果在注册表中添加了 Excel 对象作为 QTP 的保留对象,则可以使用下面的代码来实现:

Dim oSheet,arrRange

' 打开 Excel 文件

Excel.Workbooks.Open("D:/QTP/MyWork/ReadExcelFileTest1/ObjectTree.xls")

' 获取表格的使用范围

Set oSheet = Excel.Worksheets("Tree").UsedRange

' 获取从 A 列到 Z 列,从第 1 行到第 1000 行的范围 i 中的所有值

Set oRange = oSheet.Range("A1:Z1000")

' Excel 数据转换到数组

arrRange = oRange.Value

' 关闭工作簿

Excel.WorkBooks.Item(1).Close

' 退出 Excel

Excel.Quit

Msgbox arrRange(3,1)

     这种使用 Excel COM 接口的方式不仅省去了创建 COM 对象的代码,更重要的是得到了代码智能感知( IntelliSense )的功能,可以查看到 Excel 应用程序中的 COM 对象接口的所有属性和方法,如图所示。

    这将有助于提高测试脚本的编写效率,让某些 COM 对象的使用更为简单、直接,让我们的自动化测试工程师在编写测试脚本时更加高效,所要做的仅仅是在注册表中添加一些必要的信息即可。

保留对象机制解析

    在掌握了自定义保留对象的创建和使用方法后,我们回过头来思考一下 QTP 的保留对象机制:

    1 COM 对象是可以在 QTP 中通过 CreateObject 命令创建的对象,例如 Scripting.Dictionary Word.Application 等。

    2 )保留对象就是把这些 COM 对象作为 QTP 可自动识别的、已定义的对象来使用,这些对象在 QTP 启动时被加载和创建,并且只创建一次,是单件对象。

    3 )创建后可以在 QTP 的脚本中直接访问和使用,并且对象可在所有 Action 中共享,类似于全局的变量,可用于替代环境变量( Environment )使用,但是作为对象拥有更丰富的“内涵”,包括各种属性和方法,

    4 )保留对象可用于简化和组织很多编码工作:文件 IO 、写 Log 、使用 Excel Word Outlook 等,也可以用于替代环境变量,例如用 Dictionary 对象来替代环境变量,而不需要在环境变量中定义大量的变量,而且能利用 Dictionary 对象的灵活结构来存储、编辑和访问大量的数据。

    5 QTP 启动时会自动创建保留对象,例如我们把 Excel 注册到 QTP 的保留对象中,则 QTP 在启动时也会把 Excel 进程也加载,并且可以看到在 QTP 的整个运行过程中, Excel 进程都处于激活状态,可以在 Windows 任务管理器中看到 Excel 的进程,当 QTP 退出时, Excel 进程也会被关闭。因此,在这种方式下使用 Excel 要特别注意 Excel 进程不要被意外关闭,否则将出现如图所示的错误。

小结

本文深入探索了 QTP 的保留对象的机制,介绍了如何创建和使用自定义的保留对象来简化自动化测试脚本的编写工作,提高自动化测试脚本的编写效率。

实际上, QTP 中还隐藏着不少尚未对外公开的“秘密”,有待像我这样的充满“好奇心”的人去挖掘!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值