'获取正在运行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