QTP Report对象的“私家珍藏”
来源:互联网 发布:胡公子淘宝店叫什么 编辑:程序博客网 时间:2024/04/29 01:16
在关键字视图通过InterlliSense查看QTP的Report对象时(如图2所示),可发现仅有3个属性、1个方法可用,其中最常用的是ReportEvent方法。
而实际上,QTP的Report对象还有其他的方法可用,这些方法并没有对外公开,例如可用LogEvent方法来在日志树中写入一个节点:
intContext = Reporter.LogEvent("User", dicMetaDescription, Reporter.GetContext) ' 使用Reporter对象的LogEvent写入新节点
用SetContext方法把某个节点作为父节点,这样的话,后续写入的Log都将在这个父节点之下:
Reporter.SetContext intContext ' 调用Reporter对象的SetContext把新写入的节点作为父节点
如果要退出该节点,返回日志树的上一层,则可调用UnSetContext方法即可,如下脚本所示:
Reporter.UnSetContext '调用Reporter对象的UnSetContext,返回上一层
Report对象“解密”
有了LogEvent、SetContext、UnSetContext这几个方法,我们就可以实现日志的结构化、层次化写入了,例如下面的例子所示:
Set dicMetaDescription = CreateObject("Scripting.Dictionary") ' 用一个Dictionary对象来存储节点的信息
dicMetaDescription("Status") = MicDone ' 设置节点的状态
dicMetaDescription("PlainTextNodeName") = "父节点" ' 设置节点的名称
dicMetaDescription("StepHtmlInfo") = "<DIV align=left><H1>这是一个拥有孩子的节点</H1><b>Hello!</b> How are you!.</DIV>" ' 设置节点的详细描述信息(可以使用HTML格式)
dicMetaDescription("DllIconIndex") = 210 ' 设置节点的图标
dicMetaDescription("DllIconSelIndex") = 210
dicMetaDescription("DllPAth") = "D:\Program Files\HP\QuickTest Professional\bin\ContextManager.dll" ' 节点图标从ContextManager.dll这个DLL文件中读取
intContext = Reporter.LogEvent("User", dicMetaDescription, Reporter.GetContext) ' 使用Reporter对象的LogEvent写入新节点
Reporter.SetContext intContext ' 调用Reporter对象的SetContext把新写入的节点作为父节点
Reporter.ReportEvent MicPass, "Step1", "Step1 Pass!" ' 后续写入的Log都将在这个父节点之下
Reporter.ReportEvent MicWarnning, "Step2", "Step2 Pass With Warnning!"
Reporter.ReportEvent MicFail, "Step2", "Step2 Fail!"
Reporter.UnSetContext '调用Reporter对象的UnSetContext,返回上一层
Reporter.ReportEvent MicPass, "Case2", "Case2 Pass!" ' 在父节点之外写Log
在这个例子中,我们首先用一个Dictionary对象来存储节点的信息,其中Status表示节点的状态,例如MicDone就表示完成状态;PlainTextNodeName表示节点的名称;StepHtmlInfo表示节点的详细内容,可以用HTML格式来写入;还可以用DllIconIndex、DllIconSelIndex、DllPAth这3个属性来表示节点的图标。
然后使用Reporter对象的LogEvent把Dictionary中存储的信息写入一个新节点,再调用Reporter对象的SetContext把新写入的节点作为父节点,这样后续写入的Log都将在这个父节点之下,最后调用Reporter对象的UnSetContext,返回上一层,这样后续写入的Log将在这个父节点之外。
(1)首先在QTP中使用“Function Definition Generator”来定义一个名为“EnterNode”的函数。
Public Function EnterNode(ByRef NodeName, ByRef NodeContent)
Set dicMetaDescription = CreateObject("Scripting.Dictionary") ' 用一个Dictionary对象来存储节点的信息
dicMetaDescription("Status") = MicDone' 设置节点的状态
dicMetaDescription("PlainTextNodeName") = NodeName ' 设置节点的名称
dicMetaDescription("StepHtmlInfo") = NodeContent ' 设置节点的详细描述信息(可以使用HTML格式)
dicMetaDescription("DllIconIndex") = 210 ' 设置节点的图标
dicMetaDescription("DllIconSelIndex") = 210
dicMetaDescription("DllPAth") = "D:\Program Files\HP\QuickTest Professional\bin\ContextManager.dll" ' 节点图标从ContextManager.dll这个DLL文件中读取
intContext = Reporter.LogEvent("User", dicMetaDescription, Reporter.GetContext) ' 使用Reporter对象的LogEvent写入新节点
Reporter.SetContext intContext ' 调用Reporter对象的SetContext把新写入的节点作为父节点
End Function
(2)然后再定义一个与“EnterNode”相应的函数“ExitNode”,
ExitNode函数用于退出当前日志节点,需要与EnterNode配对使用,函数的脚本如下所示:
'@Description 退出当前日志节点(与EnterNode配对使用)
Public Function ExitNode
Reporter.UnSetContext '调用Reporter对象的UnSetContext,返回上一层
End Function
(3)有了EnterNode和ExitNode函数后,我们就可以像下面的例子一样使用EnterNode和ExitNode,实现日志记录的结构化、层次化写入:
' 进入节点
EnterNode "父节点","<DIV align=left><H1>这是一个拥有孩子的节点</H1><b>Hello!</b> How are you!.</DIV>"
' 在节点内写Log
Reporter.ReportEvent MicPass, "Step1", "Step1 Pass!"
Reporter.ReportEvent MicWarnning, "Step2", "Step2 Pass With Warnning!"
Reporter.ReportEvent MicFail, "Step2", "Step2 Fail!"
' 退出节点
ExitNode
' 在节点之外写Log
Reporter.ReportEvent MicPass, "Case2", "Case2 Pass!"
该脚本首先调用EnterNode,创建一个"父节点",并自动进入该节点的层次下,然后使用普通的ReportEvent方法写日志,当需要退出该"父节点"时,就调用一下ExitNode,则后续的日志都在该节点之外写。
小结
本文介绍了Reporter对象的几个鲜为人知的方法,利用LogEvent、SetContext、UnSetContext这几个方法,可以实现日志的结构化、层次化写入,让你的QTP测试报告看起来更加有条理、分类清晰。
不知道为什么QTP的帮助文档中没有列出这几个有用的方法,但是不管怎样,在我们揭开了Reporter对象的这些隐藏的方法后,我们就可以充分利用它们为我们服务,让我们的自动化测试脚本更加强大。
原地址:http://tech.it168.com/a2008/0806/199/000000199725.shtml
- QTP Report对象的“私家珍藏”
- QTP中report对象的封装
- (私家珍藏)IBM的Lotus Notes web网页重定向
- QTP的Description对象
- 线程的私家小院儿:ThreadLocal
- 廖学峰老师的私家菜谱
- 揭秘QTP的DeviceReplay对象
- 揭秘QTP的DeviceReplay对象
- QTP识别对象的原理
- 揭秘QTP的DeviceReplay对象
- QTP对象识别的问题
- 揭秘QTP的DeviceReplay对象
- 老中医对水果的私家点评
- 老中医对水果的私家点评
- QTP的TextUtil对象的使用
- QTP识别和操作对象的原理
- QTP中的DeviceReplay对象的使用
- QTP的对象封装与运作原理
- Android AIDL使用详解
- 麦克海尔:魔兽今天不能打让我有些意外
- Linux面试题汇总答案
- 图片数据Base64编解码(java实现)
- 面试问题整理
- QTP Report对象的“私家珍藏”
- 嵌入式 vlc源码分析锦集
- ASCII
- 【JS】Object.observe 属性监听器 Object.getNotifier自定义属性事件
- Java 每日抽奖
- MPEG & MPEG-2 system
- HDU 3743 Frosh Week(树状数组或归并排序求逆序)
- KALDI学习笔记——The build process (how Kaldi is compiled)
- Struts2链接默认对应Action扩展名和更改