注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

widebright的个人空间

// 编程和生活

 
 
 

日志

 
 

自定义QTP 生成Report报告的浏览树节点  

2010-05-12 19:25:21|  分类: 程序设计 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

QTP自动生成的report,浏览树虽然看着还可以,但有时自定义修改一下,比如
添加某个testcase啊什么自定义节点也是很必要的。但这个需要用到QTP Reporter对象的不公开的几个函数(有人说在qtp plus包的文档里面有提到)。


在QTP调试时,在watch窗口添加对QTP的Reporter对象的监视,可以找到如下函数:
----------------------
GetContext() '返回一个表示当前节点的id
GetParentId(Id) ‘得到父节点的id,没用过这个呵呵
LogEvent(et, pDescription, ParentId) ’这个主要的函数,第一个参数固定用“User”? 第二个参数一个描述节点的字典对象,第三个是要加到父节点的id。主要就是用这个函数来新建一个节点了。函数返回新建的节点号码
ReportEvent(EventStatus, ReportStepName, Details, [ImageFilePath]) 这个公开的,QTP的文档里面有了。
ReStoreContext()   ‘从栈上还原当前节点状态,呵呵,根据名字猜的
SetContext(EventId) ’这个把当前节点设置为 EventId参数指定的节点。以后的report都作为这个节点的子节点而存在。
SetRegistryRoot(Root) ‘这个不知道什么来的
SetStatus(Id, Status) ’设置id指定的节点的状态,micFail/micPass 等表面节点是不是运行成功。
StoreContext() ‘把当前的节点状态保持到栈上咯
UnSetContext() ’ 取消当前节点的设置。
----------------------
使用:有人说有时UnSetContext这个不好用,不知道UnSetContext之后还原回来的是哪个节点。所以最好先用GetContext保持以前的节点号码,然后SetContext切换到子节点去,需要退回父节点的时候使用保存起来的节点号码再SetContext一次就是了。也可以用StoreContext,ReStoreContext来帮你做这个保存和切换工作了。

那个字典描述对象的,DLL那个几个属性是指定里面的资源图标的,作为浏览树里面第二个图标。需要指定其他图标的可以自己指定dll路径和ico资源号码了。如果什么都不指定也有一个图标,不过不是很好看。QTP根据节点的执行结果,还会把对错的勾和红色叉叉的图标放到前面的。


QTP Custom Report Entry

dim curNodeId , childNodeId
curNodeId = Reporter.GetContext()
Set objDict = CreateObject("Scripting.Dictionary")
objDict("Status") = micPass
objDict("PlainTextNodeName") = "custom node"
objDict("StepHtmlInfo") = "<DIV align=left><H1>HTML layout

testing</H1><b>This</b> can be handy to have.</DIV>"
objDict("DllIconIndex") = 206
objDict("DllIconSelIndex") = 206
objDict("DllPAth") = "C:\HP\QuickTestProfessional\bin\ContextManager.dll"


' report the custom entry
childNodeId = Reporter.LogEvent ( "User", objDict, Reporter.GetContext)
Reporter.SetStatus childNodeId, micFail
Reporter.StoreContext
Reporter.SetContext(childNodeId)
Reporter.ReportEvent micFail,"step1","step1,failed"
' 这里添加其他调用action 的代码等等

childNodeId = Reporter.LogEvent ("User", objDict, childNodeId )
Reporter.SetStatus childNodeId, micDone
Reporter.SetContext(childNodeId)
Reporter.ReportEvent micFail,"step2","step2,failed"
' 这里添加其他调用action 的代码等等

childNodeId = Reporter.LogEvent ("User", objDict, childNodeId )
Reporter.SetStatus childNodeId,micPass
Reporter.SetContext(childNodeId)
Reporter.ReportEvent micPass,"step3","step3,failed"

Reporter.RestoreContext
Reporter.ReportEvent micPass,"step4","step4,failed"


===========================
上面代码最终生成的报告如图:

自定义QTP 生成Report报告的浏览树节点 - widebright - widebright的个人空间


测试的时候发现一个问题就是,调用LogEvent来添加的时候,只能顺这执行顺序来添加节点。就是说我们创建了某个节点1之后,又退出到父节点来,再做了一下其他平行关系的东西,比如添加平行一级的节点2,这时就不能再倒过头来给节点1添加一个子节点了,只能给节点2添加或者添加平行一级的。不知道我说清楚了没有,不过等你们碰到的时候就明白了呵呵。不过这个问题不大吧。

两个通用函数:

---------------------------------------------------

Function EnterChildNode(nodeName, decription)
dim curNodeId , childNodeId, objDict

Set objDict = CreateObject("Scripting.Dictionary")
objDict("Status") = micPass
objDict("PlainTextNodeName") = nodeName
objDict("StepHtmlInfo") = decription
objDict("DllIconIndex") = 206
objDict("DllIconSelIndex") = 206
objDict("DllPAth") = Environment("ProductDir") & "\bin\ContextManager.dll"

curNodeId = Reporter.GetContext()
childNodeId = Reporter.LogEvent ("User", objDict, curNodeId)
Set objDict = Nothing
Reporter.SetContext(childNodeId)
EnterChildNode = curNodeId
End Function


Function LeaveChildNode(parentID)
Reporter.SetContext parentID
End Function

用法
Dim currentID
currentID =EnterChildNode ("节点名字" , "可以使用html语法的描述")
       '这这里调用子节点的代码
       '这这里调用子节点的代码
LeaveChildNode(currentID)
---------------------------------------------------
保存当前id然后 SetContext恢复办法的最好了,StoreContext 和RestoreContext 好像有时还是不太准确,可能别的内部应用也调用这两个函数吧。

 

看了网上的几篇文档,也许你需要去看一下原文,包括:
“揭秘QTP之Reporter对象”

http://tech.it168.com/a2008/0806/199/000000199725.shtml

  评论这张
 
阅读(999)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017