QTP自动化测试权威指南(9)

发表于:2015-02-28来源:uml.org.cn作者:不详点击数: 标签:自动化测
第二十八章 QTP高级应用 在本章我们将会讨论QTP中各种相对高级的常见问题及解决方案,这里故意把本章留在最后,主要的原因是本章的各种概念在之前的

  第二十八章 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