我們在入門快打2中也使用了拋出異常的函數raise,那是用戶主動拋出通知系統的,而本講中是系統拋出的。但是他們的結果都一樣,如果沒有被處理的話,該異常會導致SilkTest的退出。
未被處理的異常有時候會是一個問題,想象一下,假設你的測試有100步,當測試運行到第10步時,突然測試腳本報一個異常(可能是待測軟件的問題,可能是環境的問題,也可能是你編寫的腳本的問題),你如果不處理,測試即時終止,那么其后的90步都無法運行。這很可能不是我們期望的結果。
不要急,在這種情況下,你可以用do…except將可能出現異常的代碼段封起來(具體哪些代碼段可能出現異常,只能根據你靠經驗來判斷了),例如:
view plaincopy to clipboardprint?
01.Do
02. OneObject.Click()
03.except
04. LogError ("can't click OneObject")
05.DoSomeOtherThings()
Do
OneObject.Click()
except
LogError ("can't click OneObject")
DoSomeOtherThings()
假如我們執行上面得代碼時,OneObject這個對象并沒有出現,那么OneObject.Click()這句就會拋出一個異常,沒關系,緊接其后的except結構會發現這個異常,并且記錄一個Error的log,當except結構中的語句都執行完后,SilkTest將繼續正常執行,也就是執行do…except結構之后的DoSomeOtherThings()語句。
說了這么多,讓我們在Cal.t這個會拋出異常的case中引入異常處理機制吧。
我們改寫代碼成如下形式:
[-] winclass Calculator
[ ] String sResult
[-] Void ClearResult()
[ ] 計算器.C.Click()
[-] void GetResult()
[ ] sResult = 計算器.CalResult.GetText()
[-] Void ClickNum1()
[ ] 計算器.N1.Click()
[ ] window Calculator Cal
[-] testcase CalSetAndClear()
[ ] 計算器.SetActive()
[-] do //1
[ ] Cal.ClickNum1() //2
[ ] //Cal.GetResult() //3
[ ] Print(Cal.sResult) //4
[-] except //5
[ ] Print("Catch an exception") //6
[ ] Cal.ClearResult()
[ ] Cal.GetResult()
[ ] Print(Cal.sResult)
現在當SilkTest執行到行4時,會拋出一個異常,接著就被其后的except捕獲這個異常,打印一句提示后,程序繼續運行剩余的三行代碼。最終的結果將打。
[ ] Catch an exception
[ ] 0.
如果你沒有注釋行3的話,那么當然不會有異常被拋出,那么程序將會正常執行,也就是說except中的語句不會起作用。怎么樣,你現在是不是又多了一種操縱silktest腳本的武器?
文章來源于領測軟件測試網 http://www.kjueaiud.com/