QTP中用于場景恢復的函數
在制作場景恢復的時候可以選擇調用函數來解決,下面的函數就是為此寫的。因為之前用的場景恢復只報錯了,看報告后大概了解了Object、Method、Arguments、retVal等參數的意義,于是寫了這個方法,一方面可以截圖,另一方面可以在報告中看到哪個對象出問題了。因為我經常是通過公司的自動化平臺調用測試案例,一般晚上或凌晨執行,第二天看結果,看結果的時候一般直接從QC打開報告查看,這樣方便自己定位問題。
這個方法的作用我簡單描述一下:首先是指定一個目錄,然后檢查是否從QC調用的(因為有時候自己單機執行也用到這個),如果是就記錄測試集的名稱,如果不是就放到SingleTest目錄,然后判斷對應的目錄是否存在,不存在就創建目錄。之后是創建日期時間標簽,然后把文件完整路徑組合起來,并加上了案例名稱,測試機器等等(因為有很多臺機器,方便查看是否某臺機器出問題了)。之后模擬2次回車按鍵是防止有異常對話框存在,然后把原來的對象語句自己還原回來,這樣如果是某個對象執行什么操作的時候語句出錯,就可以在報告里看到了。
當然并不是很完善,比如時間標簽的分秒沒有加0的判斷,Arguments其實是個集合,只不過我只考慮了1個的情況,沒考慮多個的情況。
需要用這個的朋友可以自己稍微維護改進一下。使用方法就是自己創建一個場景恢復,然后選擇指定文件里的函數,下面的函數最好單獨保存為一個文件,因為我之前把他和我的函數庫放在一起,發現里面的初始化函數被執行了2次,可能和場景恢復有關,分開后就沒問題了。
'用于恢復場景控制。 Function RecoveryFunctions(Object, Method, Arguments, retVal) '有錯誤發生時,對Desktop進行截圖并保存 ' SaveTestError "" Set objWS = CreateObject("WScript.Shell") strDesktopFolder = "T:/TestData/測試組/測試截圖/" If QCUtil.IsConnected then If TypeName(QCUtil.CurrentTestSet) <> "Nothing" Then set CurrentTSTest = QCUtil.CurrentTestSet strDesktopFolder = strDesktopFolder & CurrentTSTest.Name '如果從QC的測試集運行的,則保存到測試集名字的目錄下 Else strDesktopFolder = strDesktopFolder & "SingleTest" '如果不是從QC運行,保存到SingleTest目錄下 End If Else strDesktopFolder = strDesktopFolder & "SingleTest" End If Set objFSO = CreateObject("Scripting.FileSystemObject") If objFSO.FolderExists(strDesktopFolder) Then Set objFolder = objFSO.GetFolder(strDesktopFolder) Else Set objFolder = objFSO.CreateFolder(strDesktopFolder) End If '確定保存文件的名稱 tmpTime=Time() t=Split(tmpTime,":") If Len(t(0))<2 Then t(0) = "0" & t(0) End If tmpTime=t(0) & t(1) & t(2) tmpDate=CStr(Date()) tmpYear = CStr(Year(tmpDate)) tmpMonth = CStr(Month(tmpDate)) tmpDay = CStr(Day(tmpDate)) '如果月或日不足兩位,前面補0 If Len(tmpMonth) < 2 Then tmpMonth = "0" & tmpMonth End If If Len(tmpDay) < 2 Then tmpDay = "0" & tmpDay End If tpmDate=tmpYear & tmpMonth & tmpDay ' strTimeStamp = CStr(Year(Now)) & CStr(Month(Now)) & CStr(Day(Now)) _ ' & "_" & CStr(Hour(Now)) & CStr(Minute(Now)) & CStr(Second(Now)) strTimeStamp = tpmDate & "_" & tmpTime strFile = strDesktopFolder & "/[測試案例]" & Environment("TestName") & "_[測試機器]" & Environment("LocalHostName") & "_[測試時間]" & strTimeStamp & "_Error.png" '組合出截圖文件的名稱 '對Desktop截圖并保存 Desktop.CaptureBitmap strFile reporter.Filter = 0 Reporter.ReportEvent micFail,"案例失敗","本處提交失敗報告是為了避免下面因為數據問題導致錯誤報告沒有正常提交。" reporter.Filter = 3 set WshShell = CreateObject("WScript.Shell") WshShell.SendKeys "{ENTER}" WshShell.SendKeys "{ENTER}" strStepInfo = "Test(" & Environment("TestName") & ")-Action(" & Environment("ActionName") & ") 發生非預期錯誤,測試退出" ' strDetails = "錯誤編號:" & CStr(Err.Number) & ",錯誤描述:" & Err.Description On Error Resume Next oClass=Object.GetTOProperty("micclass") oName=Object.GetTOProperty("name") reporter.Filter = 0 Reporter.ReportEvent micFail, strStepInfo, oClass & "(" & Chr(34) & oName & Chr(34) & ")." & Method & " " & Arguments(0) & " 出現錯誤,錯誤編號:" & retVal ' Arguments應該是1個或多個參數,此處只考慮了1個的情況,以后需要維護。 reporter.Filter = 3 '清除Error并退出Test If err.number<>0 Then Err.Clear End If ' Reporter.ReportEvent micFail, strStepInfo, Method & " " & Arguments(0) & " 出現錯誤,錯誤編號:" & retVal On Error Goto 0 systemutil.CloseProcessByName("iexplore.exe") ExitTest End Function |
posted on 2012-07-03 09:42 順其自然EVO 閱讀(334) 評論(0) 編輯 收藏 所屬分類: qtp