第二十八章 QTP高級應用
在本章我們將會討論QTP中各種相對高級的常見問題及解決方案,這里故意把本章留在最后,主要的原因是本章的各種概念在之前的很多章節中已經提到過,我們還會介紹Settings對象在運行時遍歷所有的子項,此技術可以用于研究發現QTP的一些文檔未公開的隱藏特性。
不同機器的測試腳本同步執行
在一些復雜的測試系統場景下會需要QTP去通過腳本去觸發另一個腳本以及需要執行的被測應用,在這類情況下,我們需要通過同步通知方式來使不同種類的應用進行協同工作。
為了解決此類問題,我們需要從QTP腳本運行中獲取到過程信息,主要是通過QTP的自動化模型AOM下的Environment對象接口來實現所需要的同步進行協作和控制的腳本執行。以下腳本展示了怎樣通過自動化模型 AOM獲取到本地機和遠程機上的環境變量Environment對象:
'獲取正在運行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 |
原文轉自:http://www.uml.org.cn/Test/201307084.asp