'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 |
通過一個例子可以更好理解上面代碼。首先我們創建一個要動態加載的庫函數文件。
'C:\TestA.vbs Dim X X = 2 |
以下代碼演示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 |
理解執行作用域
理解測試腳本中全局作用域和本地作用域的區別是很重要的。
1)全局作用域是QTP加載所有測試資源和場景恢復庫所在。測試腳本中的所有Action都可以訪問
2)本地作用域是指所有在Action中定義的作用區域,不可被此Action之外所訪問
圖9-2描述了包含兩個Action的QTP腳本的作用域視圖,來表述QTP如何工作。
1)當腳本啟動時QTP創建全局作用域
2)QTP首先添加所有場景恢復庫。按照關聯順序從上到下
3)場景恢復庫之后,QTP加載所有關聯在 Test->Settings…->Resource (標簽)下的文件。加載的順序是從下到上
4)之后QTP根據測試定義的工作流程按順序調用每個Action。針對每個Action,QTP創建一個私有的本地作用域。此作用域在每個Action周期建立和釋放
5)在Action1中定義的方法不會被其他Action或者全局作用域訪問到
圖9-2 QTP運行作用域:本地和全局作用域
小提示:如果多個全局庫中有同名方法,那么最后一個加載的那個庫中的方法會被調用。
Option Explicit的適用性
在庫函數文件頭部的"Option Explicit"聲明允許程序員對所有使用的變量做強制變量聲明。但我們可以看到即便在某些關聯的庫中有"Option Explicit"聲明,對于沒有聲明的變量也沒有拋出錯誤。
這個出現的原因是源于全局作用域建立的機制。我們需要在所有全局作用域中而不能只在個別全局庫函數文件中使用"Option Explicit"。強制變量聲明"Option Explicit"需要放在所有使用的庫函數文件中,如果有遺漏,QTP就不會在全局域強制使用變量聲明。
全局作用域內執行本地作用域代碼
我們之前看過如何在本地作用域加載庫函數文件("運行時動態加載本地庫函數文件")以及如何從本地加載全局作用域庫函數文件("運行時動態加載全局庫函數文件")。
原文轉自:http://www.uml.org.cn/Test/201307084.asp