QTP中对用户自定义环境变量的XML操作的几个函数
生活随笔
收集整理的這篇文章主要介紹了
QTP中对用户自定义环境变量的XML操作的几个函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文地址http://blog.csdn.net/tulituqi/article/details/5441121
大家可能都知道怎么在一個Test里的多個action之間傳遞參數,可以用DataTable也可以用Parameter。
那么在多個Test之間如何傳遞參數呢,一般常用的有excel,這個方法應該比較普遍了。這里介紹一下我自己設計的方法。
就是用環境變量來傳遞參數,我們都知道有個Environment環境變量(在File-Test Setting下),其中有一個是user-define,用戶自定義的變量,而且這里還可以使用調用外部文件的方式來使用。那么我的方法就是基于此。
這里面我自己寫了4個函數,
addVar(filepath,varname,varvalue) 給指定地址的xml添加一個變量。
delVar(filepath,varname) 刪除xml里的變量
GetVars(filepath) 獲得xml里的所有變量,以dictionary對象返回
updateVar(filepath,varname,varvalue) 更新xml里的變量的值。
我自己寫的函數都不是很完善,沒有過多考慮異常處理,大部分還是以正常通過為主寫的,希望大家見諒。
這里的XML文件是QTP支持的格式,具體格式大家可以自己先創建幾個環境變量,然后導出到外部文件,再看看那個xml的結構就行了。
大體上是這樣的結構:
<Environment>
<Variable>
<Name>upload</Name>
<Value>T:/TestData/產險測試組/自動化公共庫/upload.gif</Value>
</Variable>
<Variable>
<Name>newVar</Name>
<Value>ssdfff</Value>
</Variable>
</Environment>
所以我寫的代碼只能用于QTP這個環境變量的xml文件,對于其他的xml很可能不支持了。
再談談具體的用法,我這里的Test每一個都是獨立的案例,其內部可以再調用其他可重用的action,也就是之前大家常用的方式,而我寫這些函數的用途是為了能讓多個獨立的案例串連起來執行,在QC中通過執行流依次調用。
首先,在Test里開頭使用
Environment.LoadFromFile(Path)
這個方法來讀取環境變量文件。
使用的時候只要知道變量名即可了,直接使用Environment("upload")就可以了。
如果這個案例最后有需要傳遞出去的參數,就可以用addVar的方法。
另外需要考慮的問題就是在使用環境變量前,xml文件里如果沒有那個變量就會報錯。這里需要慎重一些。
這樣使用的好處,每一個案例都是獨立的,方便傳遞參數,同時,如果提出一個新的概念就是Test重用。我在做的一個項目就完整的使用我這套設計,把很長的案例都細化分解成一個個獨立的案例,我就是為了Test之間傳遞參數方便使用的這個方法。而且在使用中發現有很多關鍵環節的Test可以重用,這比action的重用范圍大了一些。不過我這些案例并沒有什么特殊的,本身也會用到action重用,比如登錄退出。
關于Test重用的話題,改天我拿幾個例子來說比較好。可惜手頭沒有QC環境,不然可以截圖配合QC使用來詳細說明。
[vb] view plaincopyprint?
filepath="C:/UserDedinedEnvironment.xml"
Set dics = GetVars(filepath)
addVar filepath,"tttt","aaaa"
Set dics = GetVars(filepath)
updateVar filepath,"tttt","55555555"
Set dics = GetVars(filepath)
delVar filepath,"tttt"
Set dics = GetVars(filepath)
xx=1
Function GetVars(filepath) '已完成
Set objxml= CreateObject("MSXML.DOMDocument")
objxml.load filepath
Set Environ = objxml.lastChild '獲得<Environment>節點
Set dic = CreateObject("Scripting.Dictionary")
allVar = Environ.childNodes.length '獲得<Environment>節點的子節點數量,即變量個數。
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
var_name=vars.childNodes.item(0).nodeTypedValue
var_value=vars.childNodes.item(1).nodeTypedValue
dic.Add var_name,var_value
Next
Set GetVars = dic '返回dictionary的環境變量列表
Set dic = Nothing
End Function
Function addVar(filepath,varname,varvalue) '已完成
Set objxml= CreateObject("MSXML.DOMDocument")
objxml.load filepath
Set Environ = objxml.lastChild '獲得<Environment>節點
Set dic = CreateObject("Scripting.Dictionary")
allVar = Environ.childNodes.length '獲得<Environment>節點的子節點數量,即變量個數。
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
var_name=vars.childNodes.item(0).nodeTypedValue
var_value=vars.childNodes.item(1).nodeTypedValue
dic.Add var_name,var_value
Next
If dic.Exists(varname) Then
updateVar filepath,varname,varvalue
Exit Function
End If
Set vars =Environ.childNodes.item(0)
Set newVar= vars.cloneNode(1) '復制<Variable>節點
'修改子節點的值
newVar.childNodes.item(0).nodeTypedValue = varname
newVar.childNodes.item(1).nodeTypedValue = varvalue
'添加節點
Set newEnv= Environ.appendChild(newVar)
'保存xml
objxml.save filepath
End Function
Function updateVar(filepath,varname,varvalue) '已完成
Set objxml= CreateObject("MSXML.DOMDocument")
objxml.load filepath
Set Environ = objxml.lastChild '獲得<Environment>節點
allVar = Environ.childNodes.length '獲得<Environment>節點的子節點數量,即變量個數。
' Set dic = CreateObject("Scripting.Dictionary")
' For i=0 To allVar-1
' Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
' var_name=vars.childNodes.item(0).nodeTypedValue
' var_value=vars.childNodes.item(1).nodeTypedValue
' dic.Add var_name,var_value
' Next
' If Not dic.Exists(varname) Then
' addVar filepath,varname,varvalue
' Exit Function
' End If
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
var_name=vars.childNodes.item(0).nodeTypedValue
If var_name=varname Then
vars.childNodes.item(1).nodeTypedValue = varvalue '更新變量值
Exit For
End If
Next
'保存xml
objxml.save filepath
End Function
Function delVar(filepath,varname) '已完成
Set objxml= CreateObject("MSXML.DOMDocument")
objxml.load filepath
Set Environ = objxml.lastChild '獲得<Environment>節點
allVar = Environ.childNodes.length '獲得<Environment>節點的子節點數量,即變量個數。
If allVar=1 Then
Exit Function
End If
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
var_name=vars.childNodes.item(0).nodeTypedValue
If var_name=varname Then
Environ.removeChild(vars) '刪除節點
Exit For
End If
Next
'保存xml
objxml.save filepath
End Function
大家可能都知道怎么在一個Test里的多個action之間傳遞參數,可以用DataTable也可以用Parameter。
那么在多個Test之間如何傳遞參數呢,一般常用的有excel,這個方法應該比較普遍了。這里介紹一下我自己設計的方法。
就是用環境變量來傳遞參數,我們都知道有個Environment環境變量(在File-Test Setting下),其中有一個是user-define,用戶自定義的變量,而且這里還可以使用調用外部文件的方式來使用。那么我的方法就是基于此。
這里面我自己寫了4個函數,
addVar(filepath,varname,varvalue) 給指定地址的xml添加一個變量。
delVar(filepath,varname) 刪除xml里的變量
GetVars(filepath) 獲得xml里的所有變量,以dictionary對象返回
updateVar(filepath,varname,varvalue) 更新xml里的變量的值。
我自己寫的函數都不是很完善,沒有過多考慮異常處理,大部分還是以正常通過為主寫的,希望大家見諒。
這里的XML文件是QTP支持的格式,具體格式大家可以自己先創建幾個環境變量,然后導出到外部文件,再看看那個xml的結構就行了。
大體上是這樣的結構:
<Environment>
<Variable>
<Name>upload</Name>
<Value>T:/TestData/產險測試組/自動化公共庫/upload.gif</Value>
</Variable>
<Variable>
<Name>newVar</Name>
<Value>ssdfff</Value>
</Variable>
</Environment>
所以我寫的代碼只能用于QTP這個環境變量的xml文件,對于其他的xml很可能不支持了。
再談談具體的用法,我這里的Test每一個都是獨立的案例,其內部可以再調用其他可重用的action,也就是之前大家常用的方式,而我寫這些函數的用途是為了能讓多個獨立的案例串連起來執行,在QC中通過執行流依次調用。
首先,在Test里開頭使用
Environment.LoadFromFile(Path)
這個方法來讀取環境變量文件。
使用的時候只要知道變量名即可了,直接使用Environment("upload")就可以了。
如果這個案例最后有需要傳遞出去的參數,就可以用addVar的方法。
另外需要考慮的問題就是在使用環境變量前,xml文件里如果沒有那個變量就會報錯。這里需要慎重一些。
這樣使用的好處,每一個案例都是獨立的,方便傳遞參數,同時,如果提出一個新的概念就是Test重用。我在做的一個項目就完整的使用我這套設計,把很長的案例都細化分解成一個個獨立的案例,我就是為了Test之間傳遞參數方便使用的這個方法。而且在使用中發現有很多關鍵環節的Test可以重用,這比action的重用范圍大了一些。不過我這些案例并沒有什么特殊的,本身也會用到action重用,比如登錄退出。
關于Test重用的話題,改天我拿幾個例子來說比較好。可惜手頭沒有QC環境,不然可以截圖配合QC使用來詳細說明。
[vb] view plaincopyprint?
filepath="C:/UserDedinedEnvironment.xml"
Set dics = GetVars(filepath)
addVar filepath,"tttt","aaaa"
Set dics = GetVars(filepath)
updateVar filepath,"tttt","55555555"
Set dics = GetVars(filepath)
delVar filepath,"tttt"
Set dics = GetVars(filepath)
xx=1
Function GetVars(filepath) '已完成
Set objxml= CreateObject("MSXML.DOMDocument")
objxml.load filepath
Set Environ = objxml.lastChild '獲得<Environment>節點
Set dic = CreateObject("Scripting.Dictionary")
allVar = Environ.childNodes.length '獲得<Environment>節點的子節點數量,即變量個數。
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
var_name=vars.childNodes.item(0).nodeTypedValue
var_value=vars.childNodes.item(1).nodeTypedValue
dic.Add var_name,var_value
Next
Set GetVars = dic '返回dictionary的環境變量列表
Set dic = Nothing
End Function
Function addVar(filepath,varname,varvalue) '已完成
Set objxml= CreateObject("MSXML.DOMDocument")
objxml.load filepath
Set Environ = objxml.lastChild '獲得<Environment>節點
Set dic = CreateObject("Scripting.Dictionary")
allVar = Environ.childNodes.length '獲得<Environment>節點的子節點數量,即變量個數。
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
var_name=vars.childNodes.item(0).nodeTypedValue
var_value=vars.childNodes.item(1).nodeTypedValue
dic.Add var_name,var_value
Next
If dic.Exists(varname) Then
updateVar filepath,varname,varvalue
Exit Function
End If
Set vars =Environ.childNodes.item(0)
Set newVar= vars.cloneNode(1) '復制<Variable>節點
'修改子節點的值
newVar.childNodes.item(0).nodeTypedValue = varname
newVar.childNodes.item(1).nodeTypedValue = varvalue
'添加節點
Set newEnv= Environ.appendChild(newVar)
'保存xml
objxml.save filepath
End Function
Function updateVar(filepath,varname,varvalue) '已完成
Set objxml= CreateObject("MSXML.DOMDocument")
objxml.load filepath
Set Environ = objxml.lastChild '獲得<Environment>節點
allVar = Environ.childNodes.length '獲得<Environment>節點的子節點數量,即變量個數。
' Set dic = CreateObject("Scripting.Dictionary")
' For i=0 To allVar-1
' Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
' var_name=vars.childNodes.item(0).nodeTypedValue
' var_value=vars.childNodes.item(1).nodeTypedValue
' dic.Add var_name,var_value
' Next
' If Not dic.Exists(varname) Then
' addVar filepath,varname,varvalue
' Exit Function
' End If
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
var_name=vars.childNodes.item(0).nodeTypedValue
If var_name=varname Then
vars.childNodes.item(1).nodeTypedValue = varvalue '更新變量值
Exit For
End If
Next
'保存xml
objxml.save filepath
End Function
Function delVar(filepath,varname) '已完成
Set objxml= CreateObject("MSXML.DOMDocument")
objxml.load filepath
Set Environ = objxml.lastChild '獲得<Environment>節點
allVar = Environ.childNodes.length '獲得<Environment>節點的子節點數量,即變量個數。
If allVar=1 Then
Exit Function
End If
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得<Variable>節點
var_name=vars.childNodes.item(0).nodeTypedValue
If var_name=varname Then
Environ.removeChild(vars) '刪除節點
Exit For
End If
Next
'保存xml
objxml.save filepath
End Function
總結
以上是生活随笔為你收集整理的QTP中对用户自定义环境变量的XML操作的几个函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QTP操作xml文件方法
- 下一篇: QTP调用DLL