'獲取正在運行QTP的對象引用 Set qtpLocalPC = CreateObject("QuickTest.Application") sRemoteIP = "10.1.1.1" Set qtpRemotePC = CreateObject("QuickTest.Application", sRemoteIP) '獲取到環境變量 Set qtpLocalEnv = qtpLocalPC.Test.Environment Set qtpRemoteEnv = qtpRemotePC.Test.Environment '最終可以訪問到環境變量 MsgBox qtpLocalEnv("TestDir") MsgBox qtpRemoteEnv("TestDir") |
那么現在就需要等待QTP運行合適的位置時對指定環境變量進行更新,看一下如下QTP腳本:
QTP腳本1
'腳本1Script 1 '創建同步點環境變量 Environment.Value("SyncPoint1") = False Msgbox "Job 1 Completed" '實現任意操作 '<-- 另一個腳本會等待此同步點為True Environment.Value("SyncPoint1") = True Msgbox "Starting Job 2" |
此Vbscript腳本會等待QTP腳本1更新SyncPoint1的狀態后才開始執行:
'本地機器IP strCompIP = "127.0.0.1" Set qtpApp = CreateObject("QuickTest.Application", strCompIP) '等待腳本停止 While Not qtpApp.Test.IsRunning Wend '等待同步點SyncPoint環境變量更新為True While qtpApp.Test.Environment("SyncPoint1") <> True Wend MsgBox "Script 1 has passed the sync point." |
在QTP中運行腳本1以及腳本2,腳本2將會等待Job 1 Competed消息后彈出Script1 has passed the sync point消息框。
利用腳本停止腳本并重新運行腳本
這里列舉一些常見的需要重新停止并重新運行腳本的情況:
1、當動態加載環境變量后必須停止并重新運行才能被正確加載到測試腳本中
2、當在測試TE過程中需要運行多個Session,QTP不允許在單次腳本運行中運行多個TE Session,若需在腳本中運行多個Session,那么就需要在每個Session最后停止并從下一個session點繼續執行。
此技術通常用于重啟QTP并且只對第一次運行有效,當在不需要執行腳本并需要重新運行時停止QTP,通過運行一個異步腳本來控制當QTP一旦進入到非運行模式下就運行它直到腳本結束。
'停止并重運行QTP Sub StopAndReRunQTP(restartFlag) '只在flag沒有被使用過時重啟 If Setting.Exists(restartFlag) = False then '一旦flag不存在則保留flag在整個QTP Session中 Setting.AddrestartFlag,True '調用異步腳本當QTP停止后控制其繼續執行 Call AsyncReRunQTP '測試結果中關閉所有事件 Reporter.Filter = rfDisableAll '當出現錯誤時立即停止腳本 Setting("OnReplayError") = "Stop" '出現錯誤停止測試r Err.RaisevbObjectError+ 1,"Stop", "Causing Error for Stopping QTP" End if End Sub Sub AsyncReRunQTP() '運行時創建重運行腳本 Call CreateQTPRunScript() '運行異步腳本 Set wShell = CreateObject("WScript.Shell") wShell.Run"ReRunQTP.vbs" End Sub Public Function CreateQTPRunScript() '創建腳本等待qtp停止并重新運行 Set fso = CreateObject("Scripting.FileSystemObject") setfile = fso.OpenTextFile("ReRunQTP.vbs",2, True) file.WriteLine"Set qtpApp = CreateObject(""QuickTest.Application"")" file.WriteLine"While qtpApp.Test.IsRunning" file.WriteLine"Wend" file.WriteLine"qtpApp.Test.Run ,False" file.close setfile = nothing setfso = nothing End Function |
StopAndReRunQTP函數會檢查flag是否存在于Setting中,如果不存在則停止QTP,此處Setting設置持續周期起到了關鍵作用,如果沒有它則無法完成以上所實現的功能。
AsyncReRunQTP函數創建并執行了一個VBScript腳本,而此腳本會在運行時重新運行QTP,重運行腳本如下:
原文轉自:http://www.uml.org.cn/Test/201307084.asp