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方面的内容。

posted @ 2013-12-02 19:03  huntstack  阅读(896)  评论(0编辑  收藏  举报