自动化测试脚本在无人值守执行过程中可能会出现一些不可预知的错误,由于是不可预知的,所以在测试脚本中很难对出现的这些错误进行处理,但是如果出现错误,不进行相应的处理,会导致自动化测试执行被迫中断,无法继续后续的测试执行。
QTP对于这种情况给出了场景恢复来处理这些异常情况。
在场景恢复的过程中,当触发了相应的场景恢复触发事件后,我们需要对该异常采取相应的操作,QTP提供了一下几种操作类型:
1.Keyboard or mouse operation (键盘、鼠标操作)
2.Close application process (关闭应用程序进程)
3.Function call (调用函数)
4.Restart Microsoft Windows (重新启动Microsoft
Windows操作系统,注意此操作慎用)
以上类型1、2、4按照场景恢复向导往下做就可以,这里主要说一下3.Function
call(函数调用),函数调用是在触发相应的场景恢复后需要调用相应的函数处理该异常。
当我们调用函数时,不同的事件触发类型,调用的外部函数或者自定义的函数格式不一样,各触发器事件调用或自定义的函数必须满足以下对应的函数格式:
(1)场景触发事件:
Test Error Run
函数格式:
Function RecoveryFunctionName(Object, Method, Arguments, retVal)
语句
End Function
参数说明:
Object - 发生错误时自动映射当前错误的QTP封装测试对象
用法举例:msgbox Object.GetTOProperty("testObjName"),
结果:输出对象库中的testObjName的属性值
参数可以为qtp对象库中该对象的封装的任意属性,testObjName为隐藏属性
Method - 发生错误时自动映射当前错误的QTP测试对象方法
用法举例:msgbox Method
结果:输出测试对象的方法
Arguments - 发生错误时自动映射当前错误的所有参数
用法举例:msgbox jion(Arguments,",")
结果:输出所有参数,以逗号分隔
由于参数时数组,所以可以采用jion方法连接数组
retVal - 发生错误时自动映射当前错误的具体错误信息
用法举例:msgbox DescribeResult(Result)
结果:输出详细错误信息
retVal是Long类型数据,不能直接输出,必须使用DescribeResult方法来进行转化
以上参数名称可以自定义,但是函数必须要有四个参数,而且不能为sub过程函数,只能为function函数
实例:
Function RecoveryFunction1(Obj, Meth, Arg, retV)
Reporter.reportevent micFail,Obj.GetToProperty("testObjName"),_
"方法:"&meth&";参数:"&join(Arg,",")&";详细错误信息:"&DescribeResult(result)
End Function
(2)场景触发事件:pop-up window 和 Object Statues
函数格式:
Function RecoveryFunctionName(Object)
语句
End Function
参数说明:
Object - 检查到的对象
(3)场景触发事件:Application crash
函数格式:
Function RecoveryFunctionName(ProcessName, ProcessId)
语句
End Function
参数说明:
ProcessName - 检测到的进程的名称
ProcessId - 检测到的进程的ID