QTP错误处理机制

 1. 概述

  本文针对QTP提供的运行时错误处理机制进行详细描述。内容包括各种错误处理方式的功能的介绍,各种机制的作用范围的分析,以及错误处理机制同时作用时的优先级别的分析。

  2. 三种错误处理方式介绍

  Quick Test Professional 中有三种错误处理机制,在这里定义为:

  全局错误响应: Test Setting 中Run 设置

  VBScript On Error 错误处理: On Error Resume Next

  错误恢复场景: Recovery Scenarios

  2.1 全局错误响应

  全局错误响应在Test Setting 的Run 选项中进行设置:【File】—>【Settings】—>【Run】—>【When error occurs during run session】

  QTP四种全局错误响应设置选项如下:

  pop up message box: Quick Test 在出现错误时显示一个错误消息对话框

  process to next action iteration:Quick Test 出现错误时继续下一个Action 循环

  stop run: Quick Test 在出现错误时停止测试

  process to next step:Quick Test 在出现错误时跳过错误语句,继续下一步骤

  全局错误响应是QTP 的系统缺省错误处理,就是说当没有使用其他错误处理方式时,系统会自动调用在这里指定的方式进行错误处理

  2.2 VBScript 的On Error 错误处理方式

  由于QTP 使用了VBScript 作为脚本语言,自然地,VBScrip 的错误处理方式在QTP 中都适用。在VBScript中,与错误处理相关的三者为:

  On Error Resume Next 语句

  On Error GoTo 0 语句

  Err 对象

  2.2.1 On Error Resume Next

  一旦这个语句已被处理,脚本引擎将继续运行后面的程序,而不理会已经发现的任何错误。

  2.2.2 On Error GoTo 0

  使用On Error Goto 0 语句恢复缺省的错误处理行为。在运行这个语句后,发生的运行期错误将导致缺省错误处理。在QTP 中,缺省错误处理就是全局错误响应。

  2.2.3 Err 对象

  Err 对象重要的属性有三个:Number, Source, Description,分别是错误号,错误来源,错误描述.Err 对象会在运行时错误发生的时候赋予新的值,旧的值会被舍弃。Err 对象不会受到函数调用的影响,它完全是全局的。Err 对象可以用Clear 方法清空,任何时候调用On Error Resume Next 或者On Error GoTo 0 的时候,都会清空Err 对象。

  2.3 恢复场景Recovery Scenarios

  Resources_Recovery Scenarios Manager…可以创建恢复场景。具体请参考帮助文档,这里只是说明对于运行错误的处理。在恢复场景中触发事件TriggerEvent 中的一个选项是Test Run Error,表示在运行过程中遇到错误时所采取的恢复处理方式。我们看一看下面对哪几种错误进行恢复处理,即错误恢复的触发条件:


  Any Error

  Item in list or menu is not unique

  Item in list or menu not found

  More than one object responds to the physical description

  Object is disable

  Object not found

  Object not visible

  恢复处理(Recovery Operation)有以下几种方式:


  Keyboard or mouse operation

  Close application process

  Function call

  Restart Microsoft Windows

  从恢复场景的触发条件可以看出,所有错误处理都是针对测试对象发生的错误而言的(Any Error 指列表中所有的其他错误类型),它并不处理被零除、非法赋值,内存分配错误等等VBScript 的运行时错误。这是和其它两种错误处理方式不同之处。为了说明这一点,我们不妨再看看Recovery Operation 中OperationType 如果选择Function Call,函数原型定义如下所示,所有的函数参数都必须包含有被测对象,触发函数必须遵循原型定义,否则函数无法执行。

再来看错误恢复的后处理方式(Post-Recovery Test Run Options)有以下几种:


  Repeat current step and continue

  Proceed to next step

  Proceed to next action or component iteration

  Proceed to next test iteration

  Restart current test run

  Stop the test run

  我们看到Proceed to next step/ Proceed to next action or component iteration/ Stop the test run这三种方式在全局错误处响应理方式中也是存在的,Proceed to next step 这种方式更是和On ErrorResume Next 处理方式也是相同的。稍后会就此作进一步叙述。

  3. 三种错误处理方式的作用域

  本节阐述三种错误处理方式的作用范围,为了方便比较说明,这里假设三种错误处理方式为:

  · 全局错误响应: Process to next step

  · VBScript 错误处理: On Error Resume Next

  · 错误恢复后处理方式: Proceed to next step

  因为这三种处理方式效果一样,以后没有特殊说明,都采用以上设置,可以方便比较

  3.1 全局错误响应

  原则: 对该test 中的所有Action 均生效。也就是说在Action 里没有其他错误处理方式的时候,脚本运行过程中遇到的错误都会按照全局错误响应的设置进行处理

  3.1.1 对 Action 中直接定义的函数:

  对所有函数生效。如下例,如果全局错误响应设置成process to next step 函数testA 中的被零除语句 i=1/0 会跳过,三个msgbox 均可以执行。错误代码会逐级返回。

  3.1.2 对用ExecuteFile 引入的函数:

  与Action 中直接定义的函数处理方式完全一样

  3.1.3 对于Function Library 中定义的函数

  与Action 中直接定义的函数处理方式基本一致,对所有函数生效。但不同的是,对于错误代码,只能在Function Library 中传递,而不会传递到Action 中来。

  3.1.4 对于Action 的嵌套调用

  如之前所述,对Test 中的所有Action 均生效,自然嵌套调用的Action 也不例外。同Function Library一样,错误码只能在Action 内部传递,也就是说被调用Action 中产生的错误码不能传递到调用Action 中去。

  3.2 VBScript 的On Error 错误处理方式

  原则: 只对语句所在函数或Action 中该语句之后的代码生效,对子函数,调用Action 均无效。

  3.2.1 对 Action 中直接定义的函数:

  函数中错误抛出,不会继续执行错误代码。一个错误在函数/子程序中出现时,如果没有运行On Error Resume Next 语句,那么错误将被交给调用它的环境,这个过程一直重复到找到运行On Error Resume Next 语句的环境继续运行,或者找到缺省的脚本错误处理器。

  3.2.2 对用ExecuteFile 引入的函数:

  与对Action 中直接定义的函数的处理完全一致

  3.2.3 对于Function Library 中定义的函数

  Function Library 中定义的函数遇到错误抛出,执行系统缺省错误处理

  3.2.4 对于Action 的嵌套调用

  被调用Action 中的语句遇到错误抛出,执行系统缺省错误处理

  3.3 错误恢复场景 Recovery Scenarios

  原则: 任何函数调用和Action 中,只要满足触发条件,就会触发错误恢复处理和后处理

  前面讲过,错误恢复场景的触发条件是以下6 种


  Item in list or menu is not unique

  Item in list or menu not found

  More than one object responds to the physical description

  Object is disable

  Object not found

  Object not visible

  对于VBScript 的其他运行时错误,并不会触发错误恢复场景,当然也不存在错误恢复处理及后处理。但一旦在任何函数或者action 中满足触发条件,都会进行错误恢复处理及后处理,也就是说,其作用范围为所有Action 和函数/子程序中。当错误恢复完成后(包括错误处理及后处理),错误会被清0。如果错误恢复的后处理方式为Proceed to next step,处理完成后再次碰到VBScript 错误时如何处理呢?如新产生错误并不能满足触发条件,则原错误恢复中设置后处理方式不会继续生效,此时会遵循缺省错误响应或其他指定的错误处理。值得注意的是,如果错误恢复的后处理方式为Repeat current step and continue 或者Restart currenttest run,再次运行到该语句仍重复同样的错误,可能会导致死循环。

  4. 三种错误处理方式的优先级别

  错误恢复场景中的错误处理优先级最高 (Recovery Operation)

  On Error Resume Next 优先级次之

  错误恢复场景中的后处理方式优先级别再次之 (Post-Recovery Test Run Options)

  缺省错误响应优先级别最低

  也就是说,只要满足恢复场景的触发条件,就会进行错误恢复处理(Recovery Operation)。但是其后处理方式的优先级别和错误恢复处理的优先级别是不同的。如果触发错误恢复处理的语句之前有On ErrorResume Next,就不会执行错误恢复后处理中所定义的处理方式。当没有找到以上任何错误处理方式的定义时,才执行缺省错误处理。

  注意: On Error GoTo 0 其实就是指采用缺省错误处理,不可和On Error Resume Next 处理的优先级别等同起来。

  5. 自动化框架测试与实践

  5.1错误处理模式三种测试设计技术

  为了解决传统错误处理模式的不足,现在错误处理的技术往往采取如下的手段。

  图片处理技术

  伪视频技术

  视频技术

  5.1.1图片处理技术

  图片处理技术主要是基于原先的图片截图上进行扩展的,只要的目的是采取简便的方式来展示错误信息的显示,一般的操作过程如下:

  出现错误的时候开始截屏

  记录错误的控件的位置

  在图片上标示控件

  在控件附近标示错误的信息

  这样设计的目的就是希望方便测试人员或者开发人员能够很方便的了解导致程序出错的过程,接下来我会针对图片处理技术来进行实践。

  5.1.2伪视频技术

  伪视频的技术是为了展现因为测试过程而导致出现错误的现象。它所实现的过程是采取对每个操作过程的截屏,然后生成Gif格式的文件,类似一个动画的效果。伪视频的技术操作过程如下:

  自动化测试脚本在运行之初,初始化一段缓冲区来保存即将捕获的截图

  自动化测试脚本按照顺序进行逻辑顺序执行

  “伪视频程序”也在按照一定的频率进行截图处理,并把图片保存在缓冲区

  如果缓冲区达到最大容量,尽早的截图将会被新的图片代替

  一旦错误出现,自动化脚本通知“伪视频程序”,“伪视频程序”将手机缓冲区的截图,然后形成动态图片

  脚本运行停止

  5.1.3视频技术

  这是个真正的屏幕录制技术,采取的是自动化测试执行与屏幕录制平台操作的过程, 来录制自动化测试的一个过程。但是这个技术最大的问题在于,需要的空间比较大,如果空间小的话,就将会导致出错的过程难以有效地展现.

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-20 15:58:43

QTP错误处理机制的相关文章

ASP.NET的错误处理机制

对于一个Web应用程序来说,出错是在所难免的,因此我们应该未雨绸缪,为可能出现的错误提供恰当的处理.事实上,良好的错误处理机制正是衡量Web应用程序好坏的一个重要标准.试想一下,当用户不小心在浏览器输入了错误的URL或者当用户提供了一些信息导致程序出错的时候,如果我们没有对这些情况进行处理,而是任由404或是500的错误页面甚至出错的堆栈信息呈现在用户面前,这无疑会把一些用户给吓跑.所以,在我们开发Web应用程序的时候,应该对错误处理机制有充分的了解. 让我们回到ASP.NET上来,先提两个问题

Ajax的错误处理机制探讨(2)

ajax|错误|错误处理 实际的例子:把客户端错误传递到服务器上 现在我们知道了XMLHttpRequest和JavaScript错误处理的一些基础知识了,我们来看一个同时使用了两者的实现例子.你可能认为JavaScript错误可以很简单地在流行的"黄色死亡三角"中显示出来,但是仍然有一些错误传递到了几家篮筹股公司的公共web站点的质量部门了. 因此,我将提供一个用于捕捉错误并把错误记录到服务器上的方法,这样其他人就可能修补这些问题.首先,我们考虑客户端.客户端必须提供一个类,它被用作

击鼓传花——轮询式错误处理机制的设计与实现

错误|错误处理|设计 击鼓传花--轮询式错误处理机制的设计与实现(一) -------------------------------------------------------------------------------- 摘要 本文简单介绍了一种轮询式错误处理机制的设计思想与具体实现,本机制可以灵活地实现对错误处理方式的扩充,以及对错误信息格式的自定义. -----------------------------------------------------------------

击鼓传花——轮询式错误处理机制的设计与实现(三)

错误|错误处理|设计 ErrHdlEventLogClass: 该类是将错误信息写入系统日志的具体实现类,该类继承自AbstractHandleClass.用户在自定义错误处理方式的时候,便可仿照该类来设计.具体代码如下: public class ErrHdlEventLogClass: AbstractHandleClass { public const int ID = 2; //错误处理方式的序号 public ErrHdlEventLogClass() { // // TODO: Ad

PHP 错误处理机制_php技巧

在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息:有些错误异常会终止脚本执行,这个时候如果没有一些错误提示信息的话,那么我们只能从头开始看代码了,要知道项目中成百上千行的代码对我们来说是件多么恐怖的事情啊,那么我们如何在项目开发的过程中快速准确地定位到异常.错误呢,并进行相应的处理,本文由自己对错误.异常处理的了解,再此分享与大家相互学习交流,并作为一个备忘. 系统错误处理器: PH

全面了解javascript中的错误处理机制_javascript技巧

前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较差的用户体验.由于任何javascript错误都可能导致网页无法使用,因此作为开发人员,必须要知道何时可能出错,为什么会出错,以及会出什么错.本文将详细介绍javascript中的错误处理机制 error对象 error对象是包含错误信息的对象,是javascript的原生对象.当代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个error对象的实例,然后整个程序

深入分析javascript中的错误处理机制_javascript技巧

前面的话 错误处理对于web应用程序开发至关重要,不能提前预测到可能发生的错误,不能提前采取恢复策略,可能导致较差的用户体验.由于任何javascript错误都可能导致网页无法使用,因此作为开发人员,必须要知道何时可能出错,为什么会出错,以及会出什么错.本文将详细介绍javascript中的错误处理机制 error对象 error对象是包含错误信息的对象,是javascript的原生对象.当代码解析或运行时发生错误,javascript引擎就会自动产生并抛出一个error对象的实例,然后整个程序

GO语言标准错误处理机制error用法实例_Golang

本文实例讲述了GO语言标准错误处理机制error用法.分享给大家供大家参考.具体分析如下: 在 Golang 中,错误处理机制一般是函数返回时使用的,是对外的接口,而异常处理机制 panic-recover 一般用在函数内部. error 类型介绍 error 类型实际上是抽象了 Error() 方法的 error 接口,Golang 使用该接口进行标准的错误处理. 复制代码 代码如下: type error interface {  Error() string } 一般情况下,如果函数需要返

PHP 7错误处理机制介绍

PHP 7 改变了大多数错误的报告方式.不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出. 这种 Error 异常可以像 Exception 异常一样被第一个匹配的 try / catch 块所捕获.如果没有匹配的 catch 块,则调用异常处理函数(事先通过 set_exception_handler() 注册)进行处理. 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error). Error 类并非继承自 Exceptio