揭秘QTP保留对象机制

通过自定义对象来操作一些QTP录制脚本无法驱动的对象 通过自定义对象来操作一些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 中还隐藏着不少尚未对外公开的“秘密”,有待像我这样的充满“好奇心”的人去挖掘!

 

 

RK3568点不亮EK79007 MIPI屏?别急着改时序,先检查这个初始化命令 本文深入解析RK3568开发板调试EK79007 MIPI屏幕时初始化命令的关键作用,揭示80%的时序问题实际源于命令配置不当。通过典型故障案例,详细拆解初始化命令的调试方法、寄存器映射及系统化排查流程,帮助工程师快速定位和解决屏幕点亮问题。 阅读详情

相关推荐

实战解析:利用Python requests库高效抓取京东商品评论并构建结构化数据集

本文详细介绍了如何利用Python requests库高效抓取京东商品评论并构建结构化数据集。通过分析京东评论接口、处理反爬机制以及数据解析存储,帮助开发者快速获取电商数据,适用于竞品监控、用户画像构建等商业场景。

weixin_42526415的博客 836

QTP常用保留对象

保留对象:所谓QTP保留对象就是QTP本身预留的一些可用对象。     通俗来说就是,当打开QTP时它就已经把这些对象给实例化了,知道关闭QTP后,这些保留对象的实例才会终止。这些保留对象都是QTP事先封装好的常用操作对象,都是现成的。     保留对象中有些是可见的,有些是隐藏的(需要手工开启)。 保留对象在QTP中的呈现:打开QTP后,按F7键,弹出步骤生成器,在分类中选择保留对象类型,

chen_xi_的专栏 1163

逻辑漏洞:水平越权、垂直越权靶场练习

水平越权和垂直越权是组织中常见的管理问题,指的是员工在组织中所拥有的权力和责任超出其职位所应具备的范围。 水平越权是指员工在同一级别的职位上超越了其同事的权力和责任范围,通常表现为某个员工在团队中承担了过多的任务或权力,导致其他同事感到不公平或不满。 垂直越权则是指员工在组织中超越了其职位等级的权力和责任范围,通常表现为员工在没有得到上级批准的情况下做出决策或行动,可能会导致组织内部的混乱和冲突。

qq_68163788的博客 2469

QTP-保留对象之一

2.5  常用保留对象(Utility Objects)   阶段要点   ● 简单介绍常用保留对象。   ● 隐藏保留对象的探索。   ● 掌握自定义保留对象的编写方式。 2.5.1  常用保留对象介绍   在之前的章节中,曾经介绍过利用DataTable做数据处理,Environment环境变量以及利用Reporter编写自定义报告等,这些对象都是一些QTP

HYHOLINE的专栏 2240

Meta DINOv3实战指南:如何用7B参数ViT模型提升你的视觉任务性能(附Hugging Face部署教程)

本文提供了Meta DINOv3 7B参数ViT模型的实战部署指南。文章详细解析了该自监督视觉模型的优势,并重点演示了如何在Hugging Face平台上高效加载这一大规模模型,同时给出了图像分类、语义分割等下游任务的性能提升技巧与代码示例,帮助开发者在实际视觉任务中应用这一前沿技术。

pz89012345的博客 323

教程 | VeriStand硬件在环仿真测试第一章

这篇是系列文章的第一章,满满的都是干货,感兴趣的话欢迎一起交流探讨。

HUASUITECH的博客 1万+

QTP 保留对象

1.常用保留对象(Utility Objects)   保留对象:所谓QTP保留对象就是QTP本身预留的一些可用对象。   通俗些讲就是,当打开QTP时它就已经把这些对象给实例化了,直到关闭QTP后,这些保留对象的实例才会终止。这些保留对象都是QTP事先封装好的常用操作对象,无需像开源软件那样都需要自己来搭建这些对象和类库,一切都是现成的!在保留对象中有些是可见的,有些是隐藏的(需...

weixin_30822451的博客 324

泰山派RK3576开发板部署Qwen3-VL-4B多模态模型实战指南:从模型转换到板端推理全流程

本文提供了在泰山派RK3576开发板上部署阿里Qwen3-VL-4B多模态模型的完整实战指南。详细介绍了从环境准备、模型转换(包括视觉模型转换为.rknn格式和语言模型转换为.rkllm格式)、交叉编译到板端推理的全流程,重点讲解了如何利用RK3576的NPU进行硬件加速,实现高效的边缘AI应用。

weixin_30356433的博客 257

QTP-保留对象之二

2.5.3  自定义保留对象   在本小节中,还要给读者讲解一下什么是自定义保留对象。自定义保留对象需要并满足以下两个条件。   ● 自定义的保留对象必须是COM组件。   ● 需要添加自定义保留对象就必须更改注册表信息。   步骤:   (1)可以先用WSC来创建一个自定义COM组件,并保证可以使用CREATEOBJECT进行调用,如图2-94所示。

HYHOLINE的专栏 1920

染色体外环状DNA:肿瘤研究新方向

染色体外环状DNA(ecDNA)是癌症中活化原癌基因扩增的主要方式。区别于常染色体,这类生物大分子主要以环状的形式存在于细胞核当中,长度分布在103-106数量级,无中心粒。ecDNA序列中包含一个或者多个基因与调控元件,结构开放,转录活性强,相比于在棒状染色体结构基因,ecDNA的生物功能活性更强。癌症中,成环的基因区域拷贝数往往增高,而超过一半的高拷贝数事件是ecDNA驱动生成。...

blackjimmy的博客 765

YOLOv8改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣本专栏已更新150多种不同的改进方法,所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行。2️⃣所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,紧跟学术热点,适应不同的任务场景。3️⃣团队内发表数篇SCI论文,熟悉完整的发表流程,订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容。4️⃣专栏内容会持续更新,最近更新时间:2024-12-24。项目介绍在大家购买专栏后,加入学

Limiiiing的博客 1万+

在51testing第10期杂志发表了两篇文章

在51testing第10期杂志发表了两篇文章,杂志下载地址:http://www.51testing.com/?action_viewnews_itemid_89375.html 其中有我写的一篇文章《揭秘QTP保留对象机制》,主要介绍QTP的保留对象的机制以及如何使用保留对象。 另外还有一篇译稿《机器与人》,原文是Jonathan Kohl写的《Man and Machin

软件质量优化 2605

【深度学习】最强算法之:残差网络(ResNet)

一篇掌握深度学习算法之:残差网络

商务合作 | 面试培训 | 职场规划 ==>主页扫码 7837

《QTP自动化测试进阶》(8)

学习《QTP自动化测试进阶》第10章 – QTP测试脚本开发 Utility对象: 用PathFinder对象查找文件 用XMLUtil对象检查XML 用Extern对象加载DLL 用SystemUtil的Run方法启动被测试程序 用Reporter写测试结果 用Environment读写环境变量 QTP内置函数的使用: 用Print函数显示信息...

weixin_33824363的博客 130

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

QTP对象的方法(一)

一.对象的方法 Activate:object.Activate [Item] 激活对象 Item—列表中选择(名字:用引号;数字索引:不带引号;非必填项) 例1:Browser("Demo of Vo Object").Page("Demo of Vo Object") .ActiveX("VoDemoFormX").VirtualList("list").Activate 3 激活

sunnyken_97的博客 3067

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

QTP基本使用——Recovery Scenarios

什么是Recovery Scenarios   :在脚本运行的过程中, 可能会出现一些非预期的事件、错误、程序崩溃等情况,阻止脚本继续执行下去, 那么测试脚本可能一直暂停执行, 知道某些界面操作被执行才能恢复。 为了处理这类型的错误, QTP创建了Recovery Scenarios, 并关联到某个测试脚本。 这些恢复场景会被相应的事件出发并执行。  什么时候使用Recovery Sc

ShanDong_Chu 1688

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

QTP中为什么恢复场景(Recovery Scenario)没有被触发?

Tarun Lalwani在这篇文章归纳总结了5种QTP的恢复场景不会被触发的情况:Why is my Recovery Scenario not getting fired?http://knowledgeinbox.com/articles/qtp/recovery-scenario/why-is-my-recovery-scenario-not-getting-fired/Debuggi

软件质量优化 3654

QTP对象识别机制 (转载)

测试对象模型是一大组对象类型或类,比如WebElement、WebList,QTP用这些对象类型和类来表示Web页面中的对象。每个测试对象类都有一个可以唯一标识对象的属性列表以及可以录制的方法,这个属性列表和方法列表是可以设置的,见图:     在Object Identification对话框中设置的属性录制完后都可以在Object Repository中查看。属性的具体分类见下一小节。

卡基斯专栏 788

巧用QTP的保留对象TestArgs

在QTP的setting中,可以添加Parameter,并且对参数赋值,然后,我们可以通过QTP的保留对象TestArgs,可以访问到这些参数的值。     示例代码: Reporter.ReportEvent micDone,"TestArgs",TestArgs("DBType") Reporter.ReportEvent micDone,"TestArgs",TestArgs("D

上善若水,水善利万物而不争。 1525

QTP之reporter对象方法全解析

原文链接: http://hi.baidu.com/widebright/blog/item/8b08ca95230a0247d1135ef5.html QTP默认提供的reporter公开方法显然不能满足我们通常的需求,所以有人就挖掘出了未公开方法。其一种挖掘方式就是利用qtp的debug功能,定位到reporter对象并查看其属性值、方法名。同理对于其他我们想了解的QTP对象,如果其

上帝De助手 4922

QTP对象识别常用方法介绍

QTP对象识别常用方法介绍(转自一起测试网) 1 手动更改测试对象属性值,以匹配应用程序中对象的新静态属性。 在对象库中手动修改测试对象的属性 2 使用SetTOProperty方法 可以在运行会话期间使用SetTOProperty方法修改测试对象属性,而不必更改对象库中的属性值。 这种方法不是手动到对象库中修改,而是通过添加脚本来实现,尽管它的效果与手工修改类似,但是因为它可以充分...

xianglong_yin的博客 452

QT技巧 - QT中如何确定new对象是否要释放

QT技巧 - QT中如何确定new对象是否要释放 如需转载请标明出处:http://blog.youkuaiyun.com/itas109 QQ技术交流群:12951803 目录 QT技巧 - QT中如何确定new对象是否要释放 1.前言 2.QT的自动释放机制 3.结论 环境: QT版本:5.6.2 基础内容阅读: QT基础 - QObject简介 1.前...

itas109的专栏 1万+

Excel的三种密码:防看、防存、防乱改,各管各的

你的Excel该用哪种密码?看完这篇就懂了

passneo的博客 174

全星FMEA系统深度评测:从Excel地狱到平台化失效分析的工程实践

全星FMEA系统的核心价值不在"表格电子化",而在七步法结构化 + 三大文件联动 + 变更可追溯 + 平台化集成。它不完美——自动化程度有限、对基础数据质量高度依赖、AI能力偏保守。但对于需要"说得清、改得准、审得过"的制造企业,这套取舍是合理的。一句话:它卖的不是FMEA软件,是研发风险的可控性。欢迎评论区交流FMEA系统选型与实施经验,后续可拆解APQP/PPAP联动细节。#FMEA #质量管理 #APQP #IATF16949 #制造业数字化 #技术选型。

2501_90343043的博客 311

AI如何批量处理Excel文件? 从数据合并、清洗到自动生成报表,看看 AI Agent 怎么完成任务

对于经常需要处理Excel、CSV等结构化数据的用户,这种方式能够将原本需要手动编写脚本的工作,转化为更自然的任务描述和程序执行流程。例如,“删除重复数据”就不够具体,因为两行数据可能具有相同的部门和产品名称,却对应不同日期和不同订单。“请读取指定文件夹中的销售Excel文件,检查每个文件的字段结构,将日期格式统一,合并有效记录,检查重复数据和空值,按照部门和月份统计销售额,最后输出汇总文件。对于需要处理文档、表格、PPT和资料整理的用户,可以重点考察它在办公任务组织和成果生成方面的实际能力。

kejixinzixun的博客 182
上一篇: 在QTP中使用Dictionary对象来替代环境变量
下一篇: 《TestComplete Made Easy》读书笔记
TIB
TIB
博客等级 码龄19年 2879粉丝 957原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值