大家可能都知道怎么在一個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的結構就行了。
大體上是這樣的結構:
所以我寫的代碼只能用于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 '獲得
Set dic = CreateObject("Scripting.Dictionary")
allVar = Environ.childNodes.length '獲得
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得
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 '獲得
Set dic = CreateObject("Scripting.Dictionary")
allVar = Environ.childNodes.length '獲得
For i=0 To allVar-1
Set vars=Environ.childNodes.item(i) '獲得
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) '復制
原文轉自:http://www.anti-gravitydesign.com