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視頻技術
這是個真正的屏幕錄制技術,采取的是自動化測試執行與屏幕錄制平臺操作的過程, 來錄制自動化測試的一個過程。但是這個技術最大的問題在于,需要的空間比較大,如果空間小的話,就將會導致出錯的過程難以有效地展現.
posted on 2014-01-29 10:47 順其自然EVO 閱讀(406) 評論(0) 編輯 收藏 所屬分類: qtp