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