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有对象有很多属性和方法,今天只介绍几个常用的. 创 ...
随机推荐
- JavaScript Math对象
Math对象是JavaScript的一个固有对象,其作用是执行常见的算数任务.该对象的使用并不是像Date,Array对象使用 new关键字来得到对象,而是直接 Math.[{property|met ...
- 国内流行的两大开源.net微信公众平台SDK对比分析
最近忙于微信周边的开发 难免手痒去搜索一下有没有相关的sdk直接拿来使 还真发现了不少 这里总结两个看起来比较不错的.net平台下基于C#语言开发的SDK 一个强大一个小巧 (1) Senparc.W ...
- C#超时处理(转载)
/// <summary> /// 超时处理 /// /// /// </summary> public class TimeoutChecker ...
- iOS英文 汉化,如调用相册,相机改“cancel”,“photos”为“取消”,“相机”
调用系统相册.相机发现是英文的系统相簿界面后标题显示“photos”,但是手机语言已经设置显示中文,纠结半天,最终在info.plist设置解决问题. 只需要改三个地方: 1.plist文件中: 2. ...
- javascript社交平台分享-新浪微博、QQ微博、QQ好友、QQ空间、人人网
整理的五个社交平台的分享 <!doctype html> <html lang="en"> <head> <meta charset=&q ...
- js事件处理 —— 详解
对于JS事件处理分为四部分: 1.html事件处理程序 直接添加到HTML结构中 解析:用html处理程序可以直接在button元素里直接调用,但是维护性不是很方便 <!DOCTYPE html ...
- 【Linux】常用命令
一.文件结构 /: 根目录 /bin: 系统所需要的那些命令位于此目录. /boot: Linux的内核及引导系统程序所需要的文件目录,GRUB或LILO系统引导管理器也 ...
- github 分支 合并
Git如何进行分支管理? 1.创建分支 创建分支很简单:git branch <分支名> 2.切换分支 git checkout <分支名&g ...
- html框架集 js刷新页面方法大全
一.先来看一个简单的例子: 下面以三个页面分别命名为frame.html.top.html.bottom.html为例来具体说明如何做. frame.html 由上(top.html)下(bottom ...
- webapp开发——‘手机屏幕分辨率’与‘浏览器分辨率’不要混淆
关于webApp响应式设计遇到的问题,分享给大家,最近在做一个手机webApp,因为我手机是”米3“,屏幕截图大小是1080宽,所以css样式用@media screen and(min-width: ...