QTP异常处理

QTP提供全局错误处理模式有:Popup message box,Process next action iteration,Stop run,Process next step这四种。

QTP也提供On Error Resumt Next/On Error goto 0的局部错误处理模式。可以在局部范围内实现Process next step的效果,忽略错误继续执行后续步骤。这个局部错误处理模式,象局部变量优先于全局变量并且只在本函数内有效一样,优先级高于全局错误处理模式,同时只在本函数局部范围(Action本身也可以看成是个函数)内生效。它不会影响外层函数的错误处理模式,但会改变局部范围内调用的子孙函数,将子孙函数的错误处理模式改为Stop Run!

四种全局错误处理模式的区别在于:

1、Process next step
这种模式忽略错误继续往下执行,可以通过Err.Number来判断是否发生了错误。
因为Case函数的每个步骤都是密切相关的,不可能忽略错误继续往下执行下一步骤
也不可能在每个步骤每个语句后面都加错误检查,这样错误处理代码太多了
在很多个步骤后再检查也是不严谨的,会错上加错,并因此失去第一个错误的信息
所以,这种模式不可取

2、Stop run
这种模式发生错误后,就抛出异常(可用Err对象得到异常里的错误信息),中止本函数,并一层一层的返回到上一层函数,最后到达Action函数后(Action本身也可以看成是个函数),就停止整个Test的执行。
在一层一层的返回上层函数的过程中,如果某个中间函数有On Error Resumt Next/On Error goto 0,就会把错误拦截下来,这个中间函数会继续往下执行,不会中止函数并返回上一层函数。

3、Popup message box
这种模式在发生错误时,弹出对话框让用户选择Stop、Retry、Skip、Debug。
主控Test要全自动执行,不能要求人工干预,所以这种模式不可取

4、Process next action iteration
这种模式跟Stop run类似,但是它只是退出本次Action循环,还会继续下一个Action循环。
主控Test没有继续下一个Action循环的需求,所以这种模式不可取。

经过上述分析,我们可以得到结果,我们的主控Test,全局错误处理模式使用Stop run模式,同时在主控函数里使用On Error Resumt Next/On Error goto 0的局部错误处理模式来调用Case函数。这样使得Case函数和其子函数里发生错误时,会停止执行,并层层返回到主控函数这里,并由主控函数来拦截错误,记录错误。然后主控函数就可以正常的继续执行下一个Case函数了,不用担心会导致整个Test停止执行。

主控函数调用Case函数的详细过程如下:

Err.Clear
On Error Resume Next
call CaseFunctionName
If Err.Number <> 0 Then
WriteLog Err.Number '错误码
WriteLog Err.Description '错误描述
WriteLog Err.Source '错误来源对象,不过好像没啥用
End
Err.Clear

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值