QTP场景恢复 2.docx
《QTP场景恢复 2.docx》由会员分享,可在线阅读,更多相关《QTP场景恢复 2.docx(13页珍藏版)》请在冰点文库上搜索。
QTP场景恢复2
QTP中用于场景恢复的函数
发布者:
hid5566 来源:
网络转载 发布日期:
2013年11月11日 文章评论 发表文章
在制作场景恢复的时候可以选择调用函数来解决,下面的函数就是为此写的。
因为之前用的场景恢复只报错了,看报告后大概了解了Object、Method、Arguments、retVal等参数的意义,于是写了这个方法,一方面可以截图,另一方面可以在报告中看到哪个对象出问题了。
因为我经常是通过公司的自动化平台调用测试案例,一般晚上或凌晨执行,第二天看结果,看结果的时候一般直接从QC打开报告查看,这样方便自己定位问题。
这个方法的作用我简单描述一下:
首先是指定一个目录,然后检查是否从QC调用的(因为有时候自己单机执行也用到这个),如果是就记录测试集的名称,如果不是就放到SingleTest目录,然后判断对应的目录是否存在,不存在就创建目录。
之后是创建日期时间标签,然后把文件完整路径组合起来,并加上了案例名称,测试机器等等(因为有很多台机器,方便查看是否某台机器出问题了)。
之后模拟2次回车按键是防止有异常对话框存在,然后把原来的对象语句自己还原回来,这样如果是某个对象执行什么操作的时候语句出错,就可以在报告里看到了。
当然并不是很完善,比如时间标签的分秒没有加0的判断,Arguments其实是个集合,只不过我只考虑了1个的情况,没考虑多个的情况。
需要用这个的朋友可以自己稍微维护改进一下。
使用方法就是自己创建一个场景恢复,然后选择指定文件里的函数,下面的函数最好单独保存为一个文件,因为我之前把他和我的函数库放在一起,发现里面的初始化函数被执行了2次,可能和场景恢复有关,分开后就没问题了。
'用于恢复场景控制。
FunctionRecoveryFunctions(Object,Method,Arguments,retVal)
'有错误发生时,对Desktop进行截图并保存
'SaveTestError""
SetobjWS=CreateObject("WScript.Shell")
strDesktopFolder="T:
/TestData/测试组/测试截图/"
IfQCUtil.IsConnectedthen
IfTypeName(QCUtil.CurrentTestSet)<>"Nothing"Then
setCurrentTSTest=QCUtil.CurrentTestSet
strDesktopFolder=strDesktopFolder&CurrentTSTest.Name '如果从QC的测试集运行的,则保存到测试集名字的目录下
Else
strDesktopFolder=strDesktopFolder&"SingleTest" '如果不是从QC运行,保存到SingleTest目录下
EndIf
Else
strDesktopFolder=strDesktopFolder&"SingleTest"
EndIf
SetobjFSO=CreateObject("Scripting.FileSystemObject")
IfobjFSO.FolderExists(strDesktopFolder)Then
SetobjFolder=objFSO.GetFolder(strDesktopFolder)
Else
SetobjFolder=objFSO.CreateFolder(strDesktopFolder)
EndIf
'确定保存文件的名称
tmpTime=Time()
t=Split(tmpTime,":
")
IfLen(t(0))<2Then
t(0)="0"&t(0)
EndIf
tmpTime=t(0)&t
(1)&t
(2)
tmpDate=CStr(Date())
tmpYear=CStr(Year(tmpDate))
tmpMonth=CStr(Month(tmpDate))
tmpDay=CStr(Day(tmpDate))
'如果月或日不足两位,前面补0
IfLen(tmpMonth)<2Then
tmpMonth="0"&tmpMonth
EndIf
IfLen(tmpDay)<2Then
tmpDay="0"&tmpDay
EndIf
tpmDate=tmpYear&tmpMonth&tmpDay
'strTimeStamp=CStr(Year(Now))&CStr(Month(Now))&CStr(Day(Now))_
' &"_"&CStr(Hour(Now))&CStr(Minute(Now))&CStr(Second(Now))
strTimeStamp=tpmDate&"_"&tmpTime
strFile=strDesktopFolder&"/[测试案例]"&Environment("TestName")&"_[测试机器]"&Environment("LocalHostName")&"_[测试时间]"&strTimeStamp&"_Error.png" '组合出截图文件的名称
'对Desktop截图并保存
Desktop.CaptureBitmapstrFile
reporter.Filter=0
Reporter.ReportEventmicFail,"案例失败","本处提交失败报告是为了避免下面因为数据问题导致错误报告没有正常提交。
"
reporter.Filter=3
setWshShell=CreateObject("WScript.Shell")
WshShell.SendKeys"{ENTER}"
WshShell.SendKeys"{ENTER}"
strStepInfo="Test("&Environment("TestName")&")-Action("&Environment("ActionName")&")发生非预期错误,测试退出"
'strDetails="错误编号:
"&CStr(Err.Number)&",错误描述:
"&Err.Description
OnErrorResumeNext
oClass=Object.GetTOProperty("micclass")
oName=Object.GetTOProperty("name")
reporter.Filter=0
Reporter.ReportEventmicFail,strStepInfo,oClass&"("&Chr(34)&oName&Chr(34)&")。
"&Method&""&Arguments(0)&"出现错误,错误编号:
"&retVal
'Arguments应该是1个或多个参数,此处只考虑了1个的情况,以后需要维护。
reporter.Filter=3
'清除Error并退出Test
Iferr.number<>0Then
Err.Clear
EndIf
'Reporter.ReportEventmicFail,strStepInfo,Method&""&Arguments(0)&"出现错误,错误编号:
"&retVal
OnErrorGoto0
systemutil.CloseProcessByName("iexplore.exe")
ExitTest
EndFunction
QTP场景恢复的实践和总结
自动化测试的优点在于快速、可靠、可重复、可重用、无疲劳,是对繁重的手工测试的一次解放,适用于回归测试。
自动化还有一个特点是无人值守,测试人员要做的是通过看
REPORT
ER来判断系统是否存在缺陷。
当然,脚本执行的过程中或多或少会出现ERROR,由于无人值守的特点,接下来的脚本就会不能运行,这也是为什么在自动化脚本中弹出框要用POP函数的原因。
QTP提供的场景恢复可以解决这个问题,我将自己学习实践的过程与大家分享,有不合适的地方请大家指正。
场景恢复可以看做一种嵌入式机制,是QTP脚本的一个可安装可拆卸零部件,这个零部件的作用就是在机器出现的问题的时候根据我们的指示执行指定的命令,记录案发现场,等脚本跑完的时候递出报告,供我们分析。
我们来看看怎么制造这个零件,我分享一个出错时调用函数截图的场景恢复。
我使用的版本是QTP10.00
一、设置
1、新建RecoveryScenario
首先我们打开Resouces--RecoveryScenarioManager窗口。
点击新建场景恢复图标
,开始新建一个RecoveryScenario。
2、选择触发方式
场景恢复机制提供了四种类型的触发事件,分别用来识别:
弹出对话框、对象的特殊属性值、运行错误、应用程序失败。
我这里选择Test runerror触发方式。
Error选择Anyerror,这样出现任何错误都能触发恢复场景。
3、设置恢复时操作,这里我们选择调用函数。
点击下一步,选择编辑好的函数,我的恢复操作函数如下,函数的作用是将出错页面截屏打印到REPORTER。
FunctionRecoveryFunction1(Object,Method,Arguments,retVal)
Dimdatestamp,filename,ResPath
ResPath=Environment("ResultDir")
datestamp=Now()
filename=Environment("TestName")&"_"&datestamp&".png"
filename=Replace(filename,"/","")
filename=Replace(filename,":
","")
filename=ResPath+"\"+""&filename
Desktop.CaptureBitmapfilename,True
Reporter.ReportEventmicFail,"场景恢复","报错截屏",filename
EndFunction
点击下一步,将addanotherrecoveryoperations选项取消。
4、设置脚本恢复运行时的操作,这里处理下一个Action或者组件中的下一个迭代。
到这里,这个调用函数的场景恢复设置就基本完成了,下一步是给场景恢复取名并保存。
可以选择将新建的场景恢复添加到当前的TEST或者将其视为默认设置。
5、关联场景恢复文件
在file>setting>recovery选项中,可以选择添加或者删除场景设置,就跟resources中国添加关联函数是一个道理。
在testsetting里可以看到我们新建的场景设置已经与当前TEST关联。
二、运行
批量运行脚本实验场景恢复的作用。
在前面的脚本执行出错时不影响下一个脚本的执行,也即是场景恢复起到了作用,如果没有这个设置,我们批量运行脚本时就会中断在出错的位置,没有起到自动化应有的作用。
我们来看一下运行的报告。
SKIPITERATION,我们设置的恢复操作,执行下一个迭代。
这个是出错的截屏,这里我将密码设置错误触发了场景恢复。
谢谢大家,有不正确的请指正。