QTP中用于場(chǎng)景恢復(fù)的函數(shù)
在制作場(chǎng)景恢復(fù)的時(shí)候可以選擇調(diào)用函數(shù)來(lái)解決,下面的函數(shù)就是為此寫(xiě)的。因?yàn)橹坝玫膱?chǎng)景恢復(fù)只報(bào)錯(cuò)了,看報(bào)告后大概了解了Object、Method、Arguments、retVal等參數(shù)的意義,于是寫(xiě)了這個(gè)方法,一方面可以截圖,另一方面可以在報(bào)告中看到哪個(gè)對(duì)象出問(wèn)題了。因?yàn)槲医?jīng)常是通過(guò)公司的自動(dòng)化平臺(tái)調(diào)用測(cè)試案例,一般晚上或凌晨執(zhí)行,第二天看結(jié)果,看結(jié)果的時(shí)候一般直接從QC打開(kāi)報(bào)告查看,這樣方便自己定位問(wèn)題。
這個(gè)方法的作用我簡(jiǎn)單描述一下:首先是指定一個(gè)目錄,然后檢查是否從QC調(diào)用的(因?yàn)橛袝r(shí)候自己?jiǎn)螜C(jī)執(zhí)行也用到這個(gè)),如果是就記錄測(cè)試集的名稱(chēng),如果不是就放到SingleTest目錄,然后判斷對(duì)應(yīng)的目錄是否存在,不存在就創(chuàng)建目錄。之后是創(chuàng)建日期時(shí)間標(biāo)簽,然后把文件完整路徑組合起來(lái),并加上了案例名稱(chēng),測(cè)試機(jī)器等等(因?yàn)橛泻芏嗯_(tái)機(jī)器,方便查看是否某臺(tái)機(jī)器出問(wèn)題了)。之后模擬2次回車(chē)按鍵是防止有異常對(duì)話(huà)框存在,然后把原來(lái)的對(duì)象語(yǔ)句自己還原回來(lái),這樣如果是某個(gè)對(duì)象執(zhí)行什么操作的時(shí)候語(yǔ)句出錯(cuò),就可以在報(bào)告里看到了。
當(dāng)然并不是很完善,比如時(shí)間標(biāo)簽的分秒沒(méi)有加0的判斷,Arguments其實(shí)是個(gè)集合,只不過(guò)我只考慮了1個(gè)的情況,沒(méi)考慮多個(gè)的情況。
需要用這個(gè)的朋友可以自己稍微維護(hù)改進(jìn)一下。使用方法就是自己創(chuàng)建一個(gè)場(chǎng)景恢復(fù),然后選擇指定文件里的函數(shù),下面的函數(shù)最好單獨(dú)保存為一個(gè)文件,因?yàn)槲抑鞍阉臀业暮瘮?shù)庫(kù)放在一起,發(fā)現(xiàn)里面的初始化函數(shù)被執(zhí)行了2次,可能和場(chǎng)景恢復(fù)有關(guān),分開(kāi)后就沒(méi)問(wèn)題了。
'用于恢復(fù)場(chǎng)景控制。 Function RecoveryFunctions(Object, Method, Arguments, retVal) '有錯(cuò)誤發(fā)生時(shí),對(duì)Desktop進(jìn)行截圖并保存 ' SaveTestError "" Set objWS = CreateObject("WScript.Shell") strDesktopFolder = "T:/TestData/測(cè)試組/測(cè)試截圖/" If QCUtil.IsConnected then If TypeName(QCUtil.CurrentTestSet) <> "Nothing" Then set CurrentTSTest = QCUtil.CurrentTestSet strDesktopFolder = strDesktopFolder & CurrentTSTest.Name '如果從QC的測(cè)試集運(yùn)行的,則保存到測(cè)試集名字的目錄下 Else strDesktopFolder = strDesktopFolder & "SingleTest" '如果不是從QC運(yùn)行,保存到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 '確定保存文件的名稱(chēng) 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)) '如果月或日不足兩位,前面補(bǔ)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 & "/[測(cè)試案例]" & Environment("TestName") & "_[測(cè)試機(jī)器]" & Environment("LocalHostName") & "_[測(cè)試時(shí)間]" & strTimeStamp & "_Error.png" '組合出截圖文件的名稱(chēng) '對(duì)Desktop截圖并保存 Desktop.CaptureBitmap strFile reporter.Filter = 0 Reporter.ReportEvent micFail,"案例失敗","本處提交失敗報(bào)告是為了避免下面因?yàn)閿?shù)據(jù)問(wèn)題導(dǎo)致錯(cuò)誤報(bào)告沒(méi)有正常提交。" reporter.Filter = 3 set WshShell = CreateObject("WScript.Shell") WshShell.SendKeys "{ENTER}" WshShell.SendKeys "{ENTER}" strStepInfo = "Test(" & Environment("TestName") & ")-Action(" & Environment("ActionName") & ") 發(fā)生非預(yù)期錯(cuò)誤,測(cè)試退出" ' strDetails = "錯(cuò)誤編號(hào):" & CStr(Err.Number) & ",錯(cuò)誤描述:" & 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) & " 出現(xiàn)錯(cuò)誤,錯(cuò)誤編號(hào):" & retVal ' Arguments應(yīng)該是1個(gè)或多個(gè)參數(shù),此處只考慮了1個(gè)的情況,以后需要維護(hù)。 reporter.Filter = 3 '清除Error并退出Test If err.number<>0 Then Err.Clear End If ' Reporter.ReportEvent micFail, strStepInfo, Method & " " & Arguments(0) & " 出現(xiàn)錯(cuò)誤,錯(cuò)誤編號(hào):" & retVal On Error Goto 0 systemutil.CloseProcessByName("iexplore.exe") ExitTest End Function |
posted on 2012-07-03 09:42 順其自然EVO 閱讀(334) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): qtp