QTP Reporter类封装

最近一直在研究QTP的Reporter对象,自己也写了一个reporter的封装类,当然网上有现成的,我也参考了其中一些东西,但是自己写下来一遍还是有很多收获的。不多说了,谈谈收获。

 

1.LogEvent

Reporter.LogEvent ("User",syDictionary,Reporter.GetContext())

这句话的作用是在report里生成一个新的节点

我在网上看到很多现成的代码里都有用到上面这句话,起初不是很在意第一个参数"User",以为是一个类似于report里标题之类的东西,然后我就随便改了一个标题。但是出问题了,改变之后我甚至不能在report里找到新生成的节点!不信你们可以自己试试。经过研究Results.xml这个文件,发现原因:"User"这个参数其实定义的是我们加入Results.xml文件中节点eType类型。所以这个参数的值是不能随便乱改的。还有些其他的属性,之后有时间了我再细致地去研究一下。

 

 

2.定义属于你自己的隐藏对象

为了在写QTP脚本的时候方便,读者可以自行定义一些隐藏对象,例如Dictionary对象,文件读写FSO对象,Excel对象等,好处是可以有一定的代码提示。

具体的方法是在注册表里进行增加。

举个Excel的例子

先打开注册表:

HKEY_CURRENT_USER\Software\Mercury

Interactive\QuickTest Professional\MicTest\ReservedObjects

添加一个项Excel

然后如图加入必要的值,如图

 

 

具体做法也可以参考http://blog.csdn.net/hyholine/article/details/7255951

 

3.以下是代码:

'Option Explicit

Class Report

         Dim imgname      '图片名称

         Dim pass_count    '记录Pass的个数

         Dim fail_count   '记录Fail的个数

         Dim warning_count  '记录Warning的个数

         Dim done_count    '记录Done的个数

               Dim result  '记录结果

               Dim title       '节点标题

               Dim desc    '节点详细信息

               Dim curNodeID,childNodeID

 

         Public Sub Pass(title,desc)

            pass_count = pass_count + 1

            title = title & " PASS"

            Call LogResult(micPass,title,desc)

         End Sub

 

         Public Sub Fail(title,desc)

            fail_count = fail_count + 1

            title = title & " FAIL"

            Call LogResult(micFail,title,desc)

         End Sub

 

         Public Sub Warning(title,desc)

            warning_count = warning_count + 1

            title = title & " WARNING"

            Call LogResult(micWarning,title,desc)

         End Sub

        

         Public Sub Done(title,desc)

            done_count = done_count + 1

            title = title & " DONE"

            Call LogResult(micDone,title,desc)

         End Sub

 

         Private Sub LogResult(result,title,desc)

            desktop.CaptureBitmap imgname,true

            Reporter.ReportEvent result,title,desc,imgname  

                     imgname = Right(Replace(now,":",""),6) & RandomNumber(0,100) & ".png"        

         End Sub

      

         Private Function GenerateNote(result,title,desc)

               '自己在注册表里注册的Dictionary对象,UIName为syDictionary,这里可以直接使用了

            If syDictionary.Count > 0 then

                            syDictionary.RemoveAll

            End If

            syDictionary("Status") = result

            syDictionary("NodeName") = title

            syDictionary("StepInfo") = desc

               GenerateNote = Reporter.LogEvent ("User",syDictionary,curNodeID)

         End Function

 

               Public Sub SetParentNode(title,desc)               

                     title = title & " 父节点"

                     done_count = done_count+1

                     childNodeID = GenerateNote(micDone,title,desc)

                     Reporter.SetContext(childNodeID)

                     curNodeID = childNodeID

               End Sub

 

               Public Sub UnSetParentNode()

                     Reporter.UnSetContext()

               End Sub

 

         Private Sub Class_Initialize()

                     pass_count = 0

                     fail_count = 0

                     warning_count = 0

                     done_count = 0

                     stack_point = 0

                     curNodeID = Reporter.GetContext()

                     imgname = Right(Replace(now,":",""),6) & RandomNumber(0,100) & ".png"

                     result = micDone

                     title = ""

                     desc = ""

         End Sub

 

         Private Sub Class_Terminate()

                     Set curNodeID = nothing

                     Set childNodeID = nothing

                     Set imgname = nothing

                     print pass_count & "*****" & fail_count & "*****" & warning_count      

         End Sub

End Class

 

测试代码如下:

'*********************  testing   code  ************************************

Dim sytest

Set sytest = new Report

sytest.Done "Step 1",sytest.imgname

sytest.Fail "Step 2",sytest.imgname

sytest.SetParentNode "开始1",sytest.imgname

sytest.Pass "Step 3",sytest.imgname

sytest.Warning "Step 4",sytest.imgname

'sytest.UnSetParentNode()

'sytest.Fail "999",sytest.imgname

sytest.SetParentNode "开始2",sytest.imgname

sytest.Pass "Step 5",sytest.imgname

sytest.Pass "Step 6",sytest.imgname

'sytest.UnSetParentNode()

'sytest.Fail "999",sytest.imgname

sytest.SetParentNode"开始3",sytest.imgname

sytest.Pass "Step 7",sytest.imgname

sytest.Pass "Step 8",sytest.imgname

sytest.UnSetParentNode()

sytest.Fail "Step 9",sytest.imgname

sytest.UnSetParentNode()

sytest.Fail "Step 10",sytest.imgname

 

得到的效果图:一共分了三层,当然也可以分更多层。

 

总结:洋洋洒洒写了那么多,感觉思绪还是有点乱的,当然自己也不是很满意,感觉写的一点都不geek,还有很多需要改进的地方,希望跟大家多多交流。

posted @ 2012-08-14 15:40  平静缓和用胸音说爱  阅读(1554)  评论(2编辑  收藏  举报