Report对象“解密”
有了LogEvent、SetContext、UnSetContext这几个方法,我们就可以实现日志的结构化、层次化写入了,例如下面的例子所示:
' 用一个Dictionary对象来存储节点的信息
Set dicMetaDescription = CreateObject("Scripting.Dictionary")
' 设置节点的状态
dicMetaDescription("Status") = MicDone
' 设置节点的名称
dicMetaDescription("PlainTextNodeName") = "父节点"
' 设置节点的详细描述信息(可以使用HTML格式)
dicMetaDescription("StepHtmlInfo") = "<DIV align=left><H1>这是一个拥有孩子的节点</H1><b>Hello!</b> How are you!.</DIV>"
' 设置节点的图标
dicMetaDescription("DllIconIndex") = 210
dicMetaDescription("DllIconSelIndex") = 210
' 节点图标从ContextManager.dll这个DLL文件中读取
dicMetaDescription("DllPAth") = "D:\Program Files\HP\QuickTest Professional\bin\ContextManager.dll"
' 使用Reporter对象的LogEvent写入新节点
intContext = Reporter.LogEvent("User", dicMetaDescription, Reporter.GetContext)
' 调用Reporter对象的SetContext把新写入的节点作为父节点
Reporter.SetContext intContext
' 后续写入的Log都将在这个父节点之下
Reporter.ReportEvent MicPass, "Step1", "Step1 Pass!"
Reporter.ReportEvent MicWarnning, "Step2", "Step2 Pass With Warnning!"
Reporter.ReportEvent MicFail, "Step2", "Step2 Fail!"
'调用Reporter对象的UnSetContext,返回上一层
Reporter.UnSetContext
' 在父节点之外写Log
Reporter.ReportEvent MicPass, "Case2", "Case2 Pass!"
在这个例子中,我们首先用一个Dictionary对象来存储节点的信息,其中Status表示节点的状态,例如MicDone就表示完成状态;PlainTextNodeName表示节点的名称;StepHtmlInfo表示节点的详细内容,可以用HTML格式来写入;还可以用DllIconIndex、DllIconSelIndex、DllPAth这3个属性来表示节点的图标。
然后使用Reporter对象的LogEvent把Dictionary中存储的信息写入一个新节点,再调用Reporter对象的SetContext把新写入的节点作为父节点,这样后续写入的Log都将在这个父节点之下,最后调用Reporter对象的UnSetContext,返回上一层,这样后续写入的Log将在这个父节点之外。
这个例子的运行结果如图3所示。
图3 脚本运行结果