这个问题可用使用下面的方法解决。我们给ExecuteFileGlobal方法增加一个加载标记,当它为False时库函数文件就不会加载。可以通过给所有使用ExecuteFileGlobal方法加载的库函数文件创建一个全局字典来实现。库函数文件的路径用来判断这个库是否被加载过。
'C: \LoadLibrary.vbs Dim loadedFiles Set loadedFiles = CreateObject("Scripting.Dictionary") loadedFiles.CompareMode = vbTextCompare
'ExecuteFileGlobal方法动态加载文件 'Inputs - strFile: 需加载的完整文件名 ' reload: 是否重新加载已载入的文件 Public Function ExecuteFileGlobal (ByValstrFile,ByValreLoad) '判断reload为 False ,之后检查文件是否加载过 If reload = False and loadedFiles.Exists (strFile) then ExecuteFileGlobal = False Exit Function End if
'加载库函数文件 ExecuteFilestrFile '将文件加入字典列表 loadedFiles (strFile) = True ExecuteFileGlobal = True End Function |
通过一个例子可以更好理解上面代码。首先我们创建一个要动态加载的库函数文件。
以下代码演示ExecuteFileGlobal的使用方法
'在全局区域加载testa.vbs ExecuteFileGlobal "C:\testa.vbs", False Msgbox X '显示 2 X = X + 2
'在全局区域加载testa.vbs,如果已经加载则忽略 ExecuteFileGlobal "C:\testa.vbs", False Msgbox X '显示4
''在全局区域重新加载testa.vbs ExecuteFileGlobal "C:\testa.vbs", True Msgbox X '显示 2 |
问题 9-1. 如何动态定义全局变量
有时我们需要动态在两个或多个Action中共享变量值。使用加载库函数文件的相同概念,我们可以在运行时创建全局变量。
Declare.vbs 'C: \Declare.vbs Sub ExecuteGlobalCode (sStatement) ExecuteGlobalsStatement End Sub
Action1: '在全局范围执行代码 ExecuteGlobalCode "Dim strText" strText = "TarunLalwani"
Action2: '将显示"TarunLalwani" MsgBoxstrText |
理解执行作用域
理解测试脚本中全局作用域和本地作用域的区别是很重要的。
● 全局作用域是QTP加载所有测试资源和场景恢复库所在。测试脚本中的所有Action都可以访问
● 本地作用域是指所有在Action中定义的作用区域,不可被此Action之外所访问