前言

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

 With Browser("web对象演示")
With .Page("web对象演示")
.WebEdit("用户名").Set "test"
.WebEdit("邮箱").Set "11111@qq.com"
.WebEdit("个人介绍").Set "haha"
.WebList("开发语言").Select "java"
.WebCheckBox("电影").Set "ON"
.WebCheckBox("游戏").Set "ON"
.WebRadioGroup("性别").Select "男"
.WebButton("提交").Click
End With With .Page("用户信息示")
username=.WebTable("用户名").GetCellData(,)
mail=.WebTable("用户名").GetCellData(,)
sex=.WebTable("用户名").GetCellData(,)
End With
End With
If username="test" and mail="11111@qq.com" and sex="男" Then
msgbox "OK"
End If

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

 If username="test" Then
print "OK"
else
print "NOT OK"
End If
If mail="22222@qq.com" Then '这里故意把验证数据写错,运行结果应该是Failed
print "OK"
else
print "NOT OK"
End If
If sex="男" Then
print "OK"
else
print "NOT OK"
End If

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

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

 If username="test" Then
reporter.ReportEvent micPass,"用户名","预期结果:test"&"||"&"实际结果:"&username
else
reporter.ReportEvent micFail,"用户名","预期结果:test"&"||"&"实际结果:"&username
End If
If mail="22222@qq.com" Then '这里测试结果应该是Failed
reporter.ReportEvent micPass,"邮箱","预期结果:22222@qq.com"&"||"&"实际结果:"&mail
else
reporter.ReportEvent micFail,"邮箱","预期结果:22222@qq.com"&"||"&"实际结果:"&mail
End If
If sex="男" Then
reporter.ReportEvent micPass,"性别","预期结果:男"&"||"&"实际结果:"&sex
else
reporter.ReportEvent micFail,"性别","预期结果:男"&"||"&"实际结果:"&sex
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对象的隐藏方法了,先上代码

 If username="test" Then
reporter_set micPass,"用户名","test",username
else
reporter_set micFail,"用户名","test",username
End If
If mail="22222@qq.com" Then '这里测试结果应该是Failed
reporter_set micPass,"邮箱","22222@qq.com",mail
else
reporter_set micFail,"邮箱","22222@qq.com",mail
End If
If sex="男" Then
reporter_set micPass,"性别","男",sex
else
reporter_set micFail,"性别","男",sex
End If Private function reporter_set(ss,node_step,exp_value,actul_value)
'定义字典对象
Set result_desc = CreateObject("Scripting.Dictionary")
'状态
result_desc("Status")=ss
'设置节点名称
result_desc("PlainTextNodeName")=node_step
' 详细描述信息,可以使用HTML格式
result_desc("StepHtmlInfo") = "预期结果:"&exp_value&"||"&"实际结果:"&actul_value
' 使用Reporter对象的LogEvent方法写入新节点
int_id= Reporter.LogEvent("User", result_desc, Reporter.GetContext)
' 调用Reporter对象的SetContext把新写入的节点作为父节点
Reporter.SetContext int_id End Function

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

 '返回上一层节点演示
If username="test" Then
reporter_set micPass,"用户名","test",username
else
reporter_set micFail,"用户名","test",username
End If
If mail="22222@qq.com" Then '这里测试结果应该是Failed
reporter_set micPass,"邮箱","22222@qq.com",mail
else
reporter_set micFail,"邮箱","22222@qq.com",mail
return_previous_node
End If
If sex="男" Then
reporter_set micPass,"性别","男",sex
else
reporter_set micFail,"性别","男",sex
End If Private function reporter_set(ss,node_step,exp_value,actul_value)
'定义字典对象
Set result_desc = CreateObject("Scripting.Dictionary")
'状态
result_desc("Status")=ss
'设置节点名称
result_desc("PlainTextNodeName")=node_step
' 详细描述信息,可以使用HTML格式
result_desc("StepHtmlInfo") = "预期结果:"&exp_value&"||"&"实际结果:"&actul_value
' 使用Reporter对象的LogEvent方法写入新节点
intId = Reporter.LogEvent("User", result_desc, Reporter.GetContext)
' 调用Reporter对象的SetContext把新写入的节点作为父节点
Reporter.SetContext intId
End Function Function return_previous_node
Reporter.UnSetContext
End Function

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

QTP自传之测试报告的更多相关文章

  1. QTP自传之录制

    录制,是一件吃力不讨好的活.很多人以为录制就是我的主要甚至全部的功能,这是大错特错的.不过,录制功能却是不熟悉我的人了解我的有效途径,是大家学习的有力武器.今天就先从录制功能说起吧. 说到录制,就不得 ...

  2. QTP自传之初识

    我叫QTP,全名是HP Quicktest Professional,大家都叫我小Q. 小Q生于1998年,那是一个春天(哈哈咱也是跨世纪的人才).家里人丁兴旺,兄弟众多,L(Loadrunner), ...

  3. QTP自传之web常用对象

    随着科技的进步,“下载-安装-运行”这经典的三步曲已离我们远去.web应用的高速发展,改变了我们的思维和生活习惯,同时也使web方面的自动化测试越来越重要.今天,介绍一下我对web对象的识别,为以后的 ...

  4. QTP自传之描述性编程

    描述性编程,即采用描述性的语言定位对象,不需要事先将对象添加到对象库中.下面,就说说如何使用描述性编程,我们将继续使用对象库编程中的网页. 使用描述性编程的两种方法 直接描述 对象("属性名 ...

  5. QTP自传之对象库编程

    对象库编程是我们平时工作中使用最多的编程方式,在自动化脚本开发中起到举足轻重的作用,与描述性性编程相比,更直接和易于维护,今天就和大家简单的聊聊如何进行对象库编程. 既然是对象库编程,肯定要对已存在于 ...

  6. QTP自传之对象

    对象在手,测试我有 大家别误会,这里说的对象可不是值指男女朋友,而是对被测控件的识别.经过昨天的录制,大家一定很奇怪为什么我可以做到精确的回放操作,这都要归功于对象,下面就隆重的介绍我在对象识别方面的 ...

  7. QTP脚本--应用参数化来测试某个输入框

    以前一直觉得自己没有写代码的资质,太急于求成,以为一天就能写好几个功能,几千行代码,于是就没耐心了,没心情学下去了....但是最近发现其实写代码是一个漫长的过程,都是在修修改改中成长起来的.于是今天试 ...

  8. QTP常用功能

    1.QTP录制过程的截图 查看录制脚本过程中QTP的截图可以在QTP中查找,在关键字视图中点击每一步都对应一个截图   2.在关键字视图中为测试步骤添加注释 在关键字视图中表格列头中单击鼠标右键,选择 ...

  9. QTP中FSO的使用

    序 FSO即文件系统对象(File System Object),在测试工作中有广泛的应有,它可以帮助我们自动生成测试目录,写日志,测试报告等.FSO有对象有很多属性和方法,今天只介绍几个常用的. 创 ...

随机推荐

  1. "_Default"同时存在于两个dll文件中的解决办法

    编译器错误消息:CS0433: 类型“_Default”同时存在于“c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Fi ...

  2. Oracle11g数据库导入到oracle10g的解决方法

    我想有很多人在工作和学习中遇到这样的一个问题,Oracle数据库服务器版本和本机版本不一致问题,你的本机要是比服务器的版本要高的话还好,如果你本机是10g服务器是11g的话,从11g导出来的数据库是导 ...

  3. DataView操作DataTable

    1.DataView筛选数据 //假设有一个DataTable数据 DataTable dt = new DataTable(); //转成DefaultView DataView dv = dt.D ...

  4. Quartz.NET配置(Log4net)

    最近有个任务关于服务调度,想起以前看过Quartz.NET调度任务非常棒. 今天小试Quartz.NET,前面配置Quartz.NET很轻松,控制台也输出了.但是想配合Log4net来做日志文件,怎么 ...

  5. 使用Convert 类和Parse方法将字符串转换为数值类型

    //用Parse方法将字符串转换为数值类型; long num=Int64.Parse(args[2]) //用别名为Int64c#类型long; long num=long.Parse(args[2 ...

  6. C#和asp.net中链接数据库中 参数的几种传递方法

    #region 参数传递方法第一种 //参数设置方法(第一种) //SqlParameter sp = new SqlParameter("@Name", str_Name); / ...

  7. 收集 数据库的awr数据,生成报告

    该脚本只是把awr报告的内容,原封不动的 展现出来,做记录 awrreport.sql  脚本内容如下: *********************************************** ...

  8. base64加密解密文件

    1 //字符串加密 -(void)demo1 { //普通的 8 bit二进制数据 NSString *str = @"hello world!"; //将字符串转换成二进制数据 ...

  9. 重要性!important

    我们在做网页代码的时,有些特殊的情况需要为某些样式设置具有最高权值,怎么办?这时候我们可以使用!important来解决. 如下代码: p{color:red!important;} p{color: ...

  10. IPython,让Python显得友好十倍的外套——windows XP/Win7安装详解

        前言 学习python,官方版本其实足够了.但是如果追求更好的开发体验,耐得住不厌其烦地折腾.那么我可以负责任的告诉你:IPython是我认为的唯一显著好于原版python的工具.   整理了 ...