• QTP自传之测试报告


    前言

    测试报告是测试阶段的最后产出,也是最重要的产出,自动化测试报告也是如此。前期所做的工作,添加对象、编写脚本等都是为了可以生成一份正确、严谨的测试报告。我作为一款功能全面的自动化测试工具,毫无疑问,提供了强大的测试报告定制功能,让我们从对象库编程中的脚本说起吧,脚本代码如下。

     1 With Browser("web对象演示")
     2 With .Page("web对象演示")
     3         .WebEdit("用户名").Set "test"
     4         .WebEdit("邮箱").Set "11111@qq.com"
     5         .WebEdit("个人介绍").Set "haha"
     6         .WebList("开发语言").Select "java"
     7         .WebCheckBox("电影").Set "ON"
     8         .WebCheckBox("游戏").Set "ON"
     9         .WebRadioGroup("性别").Select ""
    10         .WebButton("提交").Click
    11 End With
    12 
    13 With .Page("用户信息示")
    14         username=.WebTable("用户名").GetCellData(2,1)
    15         mail=.WebTable("用户名").GetCellData(2,2)
    16         sex=.WebTable("用户名").GetCellData(2,3)
    17 End With
    18 End With
    19 If username="test" and mail="11111@qq.com" and sex="" Then
    20    msgbox "OK"
    21 End If

    为了方便的看出测试报告的效果,简单的修改验证部分代码如下,将mail的验证数据故意写错为"22222@qq.com"。

     1 If username="test" Then
     2     print "OK"
     3 else
     4     print "NOT OK"
     5 End If
     6 If mail="22222@qq.com" Then '这里故意把验证数据写错,运行结果应该是Failed
     7     print "OK"
     8 else
     9     print "NOT OK"
    10 End If
    11 If sex="" Then
    12     print "OK"
    13 else
    14     print "NOT OK"
    15 End If

    脚本运行后,点击【Automation】->【Results】打开测试结果。

    可以看到Passed、Failed部分都为0,也就是说并没有把刚才if语句的判断结果加入到测试报告中,那是由于没有采用Report对象生成测试报告,再次修改验证部分代码,运行后看结果。

     1 If username="test" Then
     2     reporter.ReportEvent micPass,"用户名","预期结果:test"&"||"&"实际结果:"&username
     3     else
     4     reporter.ReportEvent micFail,"用户名","预期结果:test"&"||"&"实际结果:"&username
     5 End If
     6 If mail="22222@qq.com" Then '这里测试结果应该是Failed
     7     reporter.ReportEvent micPass,"邮箱","预期结果:22222@qq.com"&"||"&"实际结果:"&mail
     8     else
     9     reporter.ReportEvent micFail,"邮箱","预期结果:22222@qq.com"&"||"&"实际结果:"&mail
    10 End If
    11 If sex="" Then
    12     reporter.ReportEvent micPass,"性别","预期结果:男"&"||"&"实际结果:"&sex
    13     else
    14     reporter.ReportEvent micFail,"性别","预期结果:男"&"||"&"实际结果:"&sex
    15 End If

    Reporter对象

    这次成功了,2Passed,1Failed和我们想要的一样,Reporter对象是大功臣,必须要隆重的向大家介绍。在关键字视图中查看Reporter对象,发现有2个方法和3个属性可以使用,关于这些属性方法的具体介绍可以按F1自行查看,这里主要介绍一下ReportEvent方法。

    Reporter.ReportEvent EventStatus, ReportStepName, Details [, ImageFilePath]这是ReportEvent方法的参数介绍。

    • EventStatus:测试结果状态,有micPass、micFail、micDone和micWarning四个值可供选择,按字面意思理解即可。

    • ReportStepName:在测试结果中显示的步骤名称。

    • Details:详细描述。

    • ImageFilePath:可选参数,截图路径。

    reporter.ReportEvent micFail,"邮箱","预期结果:22222@qq.com"&"||"&"实际结果:"&mail,代表的意思是如果邮箱值与预期值不相等则将结果记为失败,步骤名称为“邮箱”,如下图

    但是,使用ReportEvent方法生成的测试报告都是一个层级的,在同一节点上,看上没有层次感。如果我们想把邮箱的验证结果放在用户名下面,而把性别的验证结果放在邮箱下面,像这样(用户名验证失败是因为父节点的结果是所有子节点结果的合取,子节点有一个失败,父节点就失败)。

    这就需要用到Reporter对象的隐藏方法了,先上代码

     1 If username="test" Then
     2     reporter_set micPass,"用户名","test",username
     3     else
     4     reporter_set micFail,"用户名","test",username
     5 End If
     6 If mail="22222@qq.com" Then '这里测试结果应该是Failed
     7     reporter_set micPass,"邮箱","22222@qq.com",mail
     8     else
     9     reporter_set micFail,"邮箱","22222@qq.com",mail
    10 End If
    11 If sex="" Then
    12     reporter_set micPass,"性别","",sex
    13     else
    14     reporter_set micFail,"性别","",sex
    15 End If
    16 
    17 Private function reporter_set(ss,node_step,exp_value,actul_value)
    18 '定义字典对象
    19 Set result_desc = CreateObject("Scripting.Dictionary")
    20 '状态
    21 result_desc("Status")=ss
    22 '设置节点名称
    23 result_desc("PlainTextNodeName")=node_step
    24 ' 详细描述信息,可以使用HTML格式
    25 result_desc("StepHtmlInfo") = "预期结果:"&exp_value&"||"&"实际结果:"&actul_value
    26 '  使用Reporter对象的LogEvent方法写入新节点
    27 int_id= Reporter.LogEvent("User", result_desc, Reporter.GetContext) 
    28 ' 调用Reporter对象的SetContext把新写入的节点作为父节点
    29 Reporter.SetContext int_id
    30 
    31 End Function

    Reporter对象的LogEvent方法可以写入一个新的节点,SetContext 是将新写入的节点当作父节点,如果想把邮箱和性别都作为用户名的子节点,需要调用Reporter对象的UnSetContext方法,该方法返回上一层节点。

     1 '返回上一层节点演示
     2 If username="test" Then
     3     reporter_set micPass,"用户名","test",username
     4     else
     5     reporter_set micFail,"用户名","test",username
     6 End If
     7 If mail="22222@qq.com" Then '这里测试结果应该是Failed
     8     reporter_set micPass,"邮箱","22222@qq.com",mail
     9     else
    10     reporter_set micFail,"邮箱","22222@qq.com",mail
    11     return_previous_node
    12 End If
    13 If sex="" Then
    14     reporter_set micPass,"性别","",sex
    15     else
    16     reporter_set micFail,"性别","",sex
    17 End If
    18 
    19 Private function reporter_set(ss,node_step,exp_value,actul_value)
    20 '定义字典对象
    21 Set result_desc = CreateObject("Scripting.Dictionary")
    22 '状态
    23 result_desc("Status")=ss
    24 '设置节点名称
    25 result_desc("PlainTextNodeName")=node_step
    26 ' 详细描述信息,可以使用HTML格式
    27 result_desc("StepHtmlInfo") = "预期结果:"&exp_value&"||"&"实际结果:"&actul_value
    28 '  使用Reporter对象的LogEvent方法写入新节点
    29 intId = Reporter.LogEvent("User", result_desc, Reporter.GetContext) 
    30 ' 调用Reporter对象的SetContext把新写入的节点作为父节点
    31 Reporter.SetContext intId
    32 End Function
    33 
    34 Function return_previous_node
    35 Reporter.UnSetContext
    36 End Function

    关于Reporter对象就介绍这么多了,他还有很多隐藏的方法,有兴趣的话可以研究研究,下一次将介绍EOM方面的内容。

  • 相关阅读:
    2014-9-思杨的缺点
    2014-8-9月杂记
    2014-7-31 思杨在老家想我们
    生日。金鼎轩吃饭;亿旺中影看《后会无期》。
    2014-7-5~6 秦皇岛之旅,带思杨看大海
    2014-6-23 去未来幼儿园玩————————
    2014-6-15 思杨的成长是全家人的责任。
    2014-6-14 思杨跳抓钱舞---疾驰的扭扭车和思杨司机
    2014-6-7 带思杨去西三旗儿童乐园玩-----思杨晕车了
    springboot学习之一
  • 原文地址:https://www.cnblogs.com/michaelle/p/4023309.html
Copyright © 2020-2023  润新知