QTP自传之测试报告
前言
测试报告是测试阶段的最后产出,也是最重要的产出,自动化测试报告也是如此。前期所做的工作,添加对象、编写脚本等都是为了可以生成一份正确、严谨的测试报告。我作为一款功能全面的自动化测试工具,毫无疑问,提供了强大的测试报告定制功能,让我们从对象库编程中的脚本说起吧,脚本代码如下。
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自传之测试报告的更多相关文章
- QTP自传之录制
录制,是一件吃力不讨好的活.很多人以为录制就是我的主要甚至全部的功能,这是大错特错的.不过,录制功能却是不熟悉我的人了解我的有效途径,是大家学习的有力武器.今天就先从录制功能说起吧. 说到录制,就不得 ...
- QTP自传之初识
我叫QTP,全名是HP Quicktest Professional,大家都叫我小Q. 小Q生于1998年,那是一个春天(哈哈咱也是跨世纪的人才).家里人丁兴旺,兄弟众多,L(Loadrunner), ...
- QTP自传之web常用对象
随着科技的进步,“下载-安装-运行”这经典的三步曲已离我们远去.web应用的高速发展,改变了我们的思维和生活习惯,同时也使web方面的自动化测试越来越重要.今天,介绍一下我对web对象的识别,为以后的 ...
- QTP自传之描述性编程
描述性编程,即采用描述性的语言定位对象,不需要事先将对象添加到对象库中.下面,就说说如何使用描述性编程,我们将继续使用对象库编程中的网页. 使用描述性编程的两种方法 直接描述 对象("属性名 ...
- QTP自传之对象库编程
对象库编程是我们平时工作中使用最多的编程方式,在自动化脚本开发中起到举足轻重的作用,与描述性性编程相比,更直接和易于维护,今天就和大家简单的聊聊如何进行对象库编程. 既然是对象库编程,肯定要对已存在于 ...
- QTP自传之对象
对象在手,测试我有 大家别误会,这里说的对象可不是值指男女朋友,而是对被测控件的识别.经过昨天的录制,大家一定很奇怪为什么我可以做到精确的回放操作,这都要归功于对象,下面就隆重的介绍我在对象识别方面的 ...
- QTP脚本--应用参数化来测试某个输入框
以前一直觉得自己没有写代码的资质,太急于求成,以为一天就能写好几个功能,几千行代码,于是就没耐心了,没心情学下去了....但是最近发现其实写代码是一个漫长的过程,都是在修修改改中成长起来的.于是今天试 ...
- QTP常用功能
1.QTP录制过程的截图 查看录制脚本过程中QTP的截图可以在QTP中查找,在关键字视图中点击每一步都对应一个截图 2.在关键字视图中为测试步骤添加注释 在关键字视图中表格列头中单击鼠标右键,选择 ...
- QTP中FSO的使用
序 FSO即文件系统对象(File System Object),在测试工作中有广泛的应有,它可以帮助我们自动生成测试目录,写日志,测试报告等.FSO有对象有很多属性和方法,今天只介绍几个常用的. 创 ...
随机推荐
- hadoop集群环境搭建之安装配置hadoop集群
在安装hadoop集群之前,需要先进行zookeeper的安装,请参照hadoop集群环境搭建之zookeeper集群的安装部署 1 将hadoop安装包解压到 /itcast/ (如果没有这个目录 ...
- java 字符串转int
//字符转整形 String aa = "23"; //int bb = Integer.parseInt(aa);//两种方式都是可以的 int bb = new Integer ...
- Hibernate 的HQL语句,初级
这里讲解简单的HQL语句,因为很多比较复杂的外查询,用一般的查询很难完成 所以这里需要使用HQL @Test public void selquery(){ System.out.printf(&qu ...
- Registry 类
提供表示 Windows 注册表中的根项的 RegistryKey 对象,并提供访问项/值对的 static 方法. 继承层次结构 System.Object Microsoft.Win32.Re ...
- MVC ViewData和ViewBag
视图数据可以通过ViewBag属性访问,它主要是为了从Controller到view进行传值用的,类似有所使用的ViewData[] 字典类.对于ViewBag是如此的强大,意味着你能动态的s ...
- acl操作记录
官方文档内容: 1.CREATE_ACL Procedure创建ACL Note: This procedure is deprecated in Oracle Database 12c. While ...
- CI框架多目录设置
1,设置目的,前台与后台实现独立目录管理 2.通过http://www.myci.com 访问前台,通过http://www.myci.com/admin 访问后台, 多目录的意思是指在同一个网 ...
- (JAVA)从零开始之--对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)
对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流: Ob ...
- 【转】 C语言自增自减运算符深入剖析
转自:http://bbs.csdn.net/topics/330189207 C语言的自增++,自减--运算符对于初学者来说一直都是个难题,甚至很多老手也会产生困惑,最近我在网上看到一个问题:#in ...
- Linux ./configure && make && make install 编译安装和卸载
正常的编译安装/卸载: 源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install). configure文件是一个可执行的脚本文件,它有很多选项, ...