QTP - 错误处理

在QTP中有多种处理错误的方法.在使用QTP时,有三种可能的错误类型,一种会遇到.它们是 :

  • 语法错误

  • 逻辑错误

  • 运行时错误

错误类型

语法错误

语法错误是拼写错误或一段代码,不能用VBscripting语言语法确认.语法错误在编译代码时发生,并且在错误修复之前无法执行.

要验证语法,请使用键盘快捷键Ctrl + F7,结果显示如图所示下面.如果没有显示窗口,可以导航到"View" →  "错误".

错误处理

逻辑错误

如果脚本语法正确但产生意外结果,则称为逻辑错误.逻辑错误通常不会中断执行但会产生错误的结果.逻辑错误可能由于各种原因,即错误的假设或对需求的误解以及有时不正确的程序逻辑(使用do-while而不是do-Until)或无限循环而发生.

检测逻辑错误的方法之一是执行对等检查并验证QTP输出文件/结果文件,以确保该工具按预期方式执行.

运行时错误

如名称所示,此类错误在运行时发生.出现这种错误的原因是尝试执行某些操作的脚本无法执行此操作,并且脚本通常会停止,因为它无法继续执行.运行时错误的经典示例是 :

  • 找不到文件,但脚本试图读取文件

  • 未找到对象,但脚本正在尝试对该特定对象执行操作

  • 将数字除以零

  • 数组索引超出范围访问数组元素时

处理运行时错误

有多种方法可以处理代码中的错误.

1.使用测试设置 : 可以通过导航到"文件">>来定义错误处理测试设置. "设置">> "运行"选项卡如下所示.我们可以选择任何指定的设置,然后单击"确定".

错误处理

2.使用On Error Statement :  "On Error"语句用于通知VBScript引擎,以便测试人员处理运行时错误,而不是允许VBScript引擎显示非用户友好的错误消息.

  • On Error Resume Next :  On Error Resume Next通知VBScript引擎在遇到错误时处理执行下一行代码.

  • On error Goto 0 : 这有助于测试人员关闭错误处理.

3.使用Err对象 : 错误对象是VBScript中的内置对象,它捕获运行时错误号和错误描述,我们可以使用它来轻松调试代码.

  • Err.Number :  Number属性返回或设置指定错误的数值.如果Err.Number值为0则表示没有发生错误.

  • Err.Description :  Description属性返回或设置有关错误的简要说明.

  • Err.Clear :  Clear方法重置Err对象并清除与之关联的所有先前值.

示例

'Call  the function to Add two Numbers Call Addition(num1,num2) 

Function Addition(a,b)  
   On error resume next  
      If NOT IsNumeric(a) or IsNumeric(b) Then 
         Print "Error number is  " &  err.number & " and description is : 
            " &  err.description 
         Err.Clear 
         Exit Function 
      End If 
   Addition = a+b 

   'disables error handling  
   On Error Goto 0 
End function

4.使用退出声明 : 退出语句可以与Err对象一起使用,以根据Err.Number值退出测试或操作或迭代.让我们详细看一下这些Exit语句.

  • ExitTest : 无论运行时迭代设置如何,退出整个QTP测试.

  • ExitAction : 退出当前操作.

  • ExitActionIteration : 退出操作的当前迭代.

  • ExitTestIteration : 退出QTP测试的当前迭代并继续下一次迭代.

5.恢复方案 : 遇到错误时,会根据某些条件触发恢复方案,并在单独的章节中详细说明.

6.记者对象 :  Reporter Object帮助我们向运行结果报告事件.它有助于我们确定相关的操作/步骤是否通过.

'Syntax: Reporter.ReportEventEventStatus, ReportStepName, Details, 
[ImageFilePath] 

'Example 
Reporter.ReportEvent micFail, "Login", "User is unable to Login."