作者Zeng YueTian,轉載請注明出處http://blog.csdn.net/yuetiantian/
開發任何軟件都需要檢測軟件的運行情況,記錄相應的日志,為以后的跟蹤提供依據。作為測試軟件,silktest提供了不少函數來方便測試工程師記錄系統信息,尤其系統發生異常時的信息。這節就簡單介紹一下silktest中常用的一些異常相關函數。
在這之前呢,讓我們復習一下,silktest默認的異常處理機制:
如果一個testcase失敗,例如期望值和你需要驗證的表達式的值不匹配,silktest在默認情況下會調用內置的復原系統,該系統會做如下的一些事情:
結束該testcase,把錯誤記錄到result文件中,并且將你的應用恢復到默認的基本狀態,為執行下一個case做好準備。
如果我們需要處理異常的話,可以把覺得可能產生異常的語句用do…except…包起來,這樣在do里面產生的異常就可以在except語句塊中進行處理啦。
異常相關的函數都是以Except單詞開頭的,例如ExceptCall,ExceptData等等。
1. ExceptData()
該函數返回值是最近一條異常的數據,它的類型是ANYTYPE。其實,這里面有兩種情況,如果最近的這個異常是silktest自動產生的異常,那么該函數返回的是該錯誤的信息字符串,如果是用戶自定義的異常,即用戶使用raise或者reraise產生的異常,那么返回值是ANYTYPE類型。下面是silktest幫助里面提供的一個例子:
testcase ExceptDataExample ()
do
Verify ("xxx", "yyy")
except
Print (ExceptData ())
do
raise 1, "My error"
except
Print (ExceptData ())
do
Print ("This will cause an exception. {5/0}")
except
Print (ExceptData ())
該testcase輸出的結果如下:
*** Error: Verify Failed - expected yyy, got xxx //這是自動產生的異常,所以是字符串
My error //這是用戶自定義的
*** Error: Divide by zero //這是自動產生的
2. ExceptLog()
該函數將把異常信息記錄進result文件。它通過調用內置的LogError函數把最接近的一條異常記錄進result文件。它也可以把發生異常時的調用堆棧的相關信息寫入result文件。
3. ExceptNum()
該函數返回最近一個異常的異常號。該異常號是一個負整形數值,為了避免沖突,一般使用正數來表示你自己拋出的異常。下面是一個使用ExceptNum函數來判斷異常號的testcase:
testcase ExceptNumExample ()
do
Verify ("xxx", "yyy")
except
Print (ExceptNum () == E_VERIFY)
do
raise 1, "My error"
except
Print (ExceptNum ())
do
Print ("This will cause an exception. {5/0}")
except
Print (ExceptNum () == E_DIVIDE_BY_ZERO)
Testcase的執行結果如下:
TRUE
1
TRUE
4. ExceptCall()
該函數返回一系列導致異常發生的函數調用,也就是說它的返回值類型是LIST OF CALL。一個CALL記錄有三個域,它們分別是:
域 |
描述 |
iLine |
返回函數調用或者是異常發生的行號(Integer) |
sFunction |
異常發生所在的函數名(String) |
sModule |
包含sFunction的文件名(String) |
下面是一個例子:
testcase ExceptCallsTest ()
do
MyFunction ()
except
PrintCallStack (ExceptCalls ())
MyFunction ()
Print ("In MyFunction")
raise 1, "raise an exception here"
PrintCallStack (LIST OF CALL 1cCall)
CALL Call
for each Call in lcCall
Print ("MODULE: {Call.sModule}",
"FUNCTION: {Call.sFunction}",
"LINE: {Call.iLine}")
該腳本的執行結果如下:
In MyFunction
MODULE: test.t FUNCTION: MyFunction LINE: 12
MODULE: test.t FUNCTION: main LINE: 4
5. ExceptPrint()
該函數打印所有關于異常的信息到result文件。該函數將調用ExceptCalls, ExceptData, ExceptNum等函數的結果集合起來,打印到result文件。如果ExceptData沒有返回值,那么將使用ExceptNum的結果代替它。
下面是一個例子:
testcase ExceptPrintExample ()
do
Verify ("xxx", "yyy")
except
ExceptPrint ()
do
raise 1, "My error"
except
ExceptPrint ()
do
Print ("This will cause an exception. {5/0}")
except
ExceptPrint ()
該腳本的執行結果如下:
*** Error: Verify failed - expected yyy, got xxx
Occurred in Verify
Called from main at test.t(3)
My error
Occurred in main at test.t(6)
*** Error: Divide by zero
Occurred in main at test.t(9)
6. ExceptClear()
該函數清除當前異常的信息,在調用它之后,其它的異常處理函數調用時就好像沒有異常發生過一樣:
a. ExceptCall將會返回一個空的列表。
b. ExceptData將會返回NULL
c. ExceptLog不會打印任何東西(沒有任何錯誤被記log)
d. ExceptNum將會返回0
e. ExceptPrint將不會打印任何東西
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/