天天看點

QTP錯誤處理機制

 1. 概述

  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 循環

  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

  從恢複場景的觸發條件可以看出,所有錯誤處理都是針對測試對象發生的錯誤而言的(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 種

  對于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/

繼續閱讀