zoukankan      html  css  js  c++  java
  • 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,还有很多需要改进的地方,希望跟大家多多交流。

  • 相关阅读:
    [开发笔记]-使用bat命令来快速安装和卸载Service服务
    [开发笔记]-多线程异步操作如何访问HttpContext?
    [开发笔记]-Windows Service服务相关注意事项
    [开发笔记]-VS2012打开解决方案崩溃或点击项目崩溃
    Chrome 开发者工具有了设备模拟器
    Mysql查看数据库表容量大小
    golang操作mysql数据库
    golang命令和VSCode配置
    golang广度优先算法-走迷宫
    golang爬取免费代理IP
  • 原文地址:https://www.cnblogs.com/ryansunyu/p/2638112.html
Copyright © 2011-2022 走看看