QTP通用性的自動化測試框架

2021-06-04 18:43:11 字數 4072 閱讀 5452

frank

如果在一般自動化測試框架上(連線qc)再考慮下面四個特性,那麼就極大地提高了擴充套件性和重用性,而且可以降低qtp程式設計錯誤。就成為了合適的大型,多平台專案的自動化測試框架。

1.     將一些基礎的函式封裝在dll檔案中,我們以.net為例。

在dll中我們利用了c#語言的特性,編寫很多實用的通用性function。如果需要還可以組織成類。

在qtp呼叫dll的方法或含dll方法的類:

dotnetdllpath = 「c:\dotnet.dll」

set dotinstance = dotnetfactory.createinstance("dotnet.name", dotnetdllpath)

dotinstance.method

可以把相似的function封裝在類中,然後在library 生成這個類的物件例項(newclassname),那麼在qtp中可以直接用這個物件 (例項)及其所有的方法。從而極大地拓展了qtp的功能。

2.     註冊新的方法和重寫qtp方法。因為註冊新的方法比較簡單,步驟及原理和重寫qtp方法一樣,所以下面以重寫qtp方法為例子。

這裡面涉及的最重要的一條語法是:

registeruserfunctoclass,methodname,functionname, setasdefault

e.g.  registeruserfunc "webedit", "set", "myset"

「set」 是qtp可以顯示的新的或自帶的方法。

「myset」 是自己寫function 的name。function functionname

大家都應用(settoproperty, getropropery等)時屬性值的名稱是絕對不能出錯的,為了防止出錯,我們可以重寫方法。

以dialog().settoproperty("windowid", win01)為例,我們對每一次dialog的settoproperty的windowid屬性編碼, 就得寫這就話,而且"windowid"拼寫不能錯;而且static,winbutton物件都有這樣的麻煩。

現在我們寫乙個這樣的方法:

function updatewindowid(obj, newvalue)

obj.settoproperty "window id", newvalue

set updatewindowid = obj

end function

registeruserfunc "dialog", "updatewindowid", " updatewindowid"

registeruserfunc "static", "updatewindowid", "updatewindowid"

registeruserfunc "winbutton", "updatewindowid", "updatewindowid"

這樣就徹底解決了這些物件,在每次程式設計settoproperty 的"windowid"屬性時,要找屬性的name是什麼。

其實這樣做是不夠的,你可以很輕鬆settoproperty 的"windowid"屬性時,但是其他的很多屬性呢?比如說」text」。所以我們寫乙個更通用的方法來解決settoproperty的屬性值問題。

通用性的settoproperty方法是:

function update(obj, propertyname, val)

obj.settoproperty propertyname, val

set update = obj

end function

所以上面的updatewindowid不用具體實現,只要呼叫通用性的update方法:

function updatewindowid(obj, newvalue)

set updatewindowid = update(obj,  "window id", newvalue           )

end function

像set (比如settoproperty) 方法是直接這樣實現的。但是像get(比如gettoproperty)方法就除了呼叫getroproperty外,還要考慮這個方法是否已經被註冊了,如果已經註冊了,呼叫新的註冊方法,否則呼叫gettoproperty方法。

所以通用性的gettoproperty方法是:

function getruntimepropertyoroverride(obj, strproperty, strapipropertyname)

dim qtpname : qtpname = getfullqtpname(obj)

dim func : set func = getref(qtpname & "." & strapipropertyname)

if not isempty(func) then

getruntimepropertyoroverride = func(objsender)

exit function

end if

getruntimepropertyoroverride = getroproperty(obj, strproperty)

end function

function getfullqtpname(obj)

dim fullqtpname: fullqtpname = obj.gettoproperty("class name") & "(""" & _

obj.gettoproperty("testobjname") & """)"

dim objcurrent : set objcurrent = obj

do while not isempty(objcurrent.gettoproperty("parent"))

set objcurrent = objcurrent.gettoproperty("parent")

fullqtpname = objcurrent.gettoproperty("class name") & "(""" & _

objcurrent.gettoproperty("testobjname") & """)" & "." & fullqtpname

loop

getfullqtpname = fullqtpname

end function

3.     關於多瀏覽器的問題比如ie不同版本和firefox。

最好定義乙個類,把所有瀏覽器的型號作為屬性。

class browsertype

public property get ie7

ie7 = "ie7"

end property

public property get ie8

ie8 = "ie8"

end property

public property get ff3

ff3 = "ff3"

end property

end class

再定義乙個類,就是qtp要直接運用的這個類的物件。因為我們設計的是面對多瀏覽器視窗的,所以我們首先生成乙個儲存browser的dictionary(比如key(browsername)-vlaue(browser))。這個類裡面有屬性:browser_pro(broswer的reference)和type(瀏覽器的type)和對外用get和set方法。要實現我們平常瀏覽器切換等功能,下面的方法就很好的實現了:

get currentbrowsername

setcurrentbrowser(strbrowsername)

getbrowser(strbrowsername)

addexistingbrowser(browsername, browserdescription)

addnewbrowser(browsername)

removeandclosebrowser(browsername):

removeandcloseallbrowsers():

4.     自定義result report.這個問題比較好解決。qtp每次執行結果會生成xml的result report。但是顯然不夠大中型專案的需要,好在這個問題在技術上好解決。這個沒有統一的寫法,專案不同report的方式內容也不同,具體**的話,google一下.

可以參考文章:

簡述QTP自動化測試框架

一提到框架,很多新入手的朋友們可能會一頭霧水。最早的我也是如此,經過一段時間的自動化測試 實際使用,我把框架的概念作了乙個簡化的理解。實現qtp 自動化測試框架實際上要由以下幾個部分組成 1 一組錄製好的qtp指令碼 2 乙個可以組織用例的excel文件 3 乙個vbscripts指令碼 這三部分內...

自動化測試QTP知識框架

基於qtp的自動化測試開發 qtp初級 基本資訊 一 軟體自動化測試 1.自動化測試 1.1.軟體自動化測試的故事 1.2.自動化測試的應用案例 1.3.自動化測試中的效益 1.4.自動化測試的風險 2.自動化測試最佳實踐模型 2.1.珍珠模型 pearl 總覽 2.2.purpose 建立自動化測...

自動化測試QTP知識框架

基於qtp的自動化測試開發 qtp初級 基本資訊 一 軟體自動化測試 1.自動化測試 1.1.軟體自動化測試的故事 1.2.自動化測試的應用案例 1.3.自動化測試中的效益 1.4.自動化測試的風險 2.自動化測試最佳實踐模型 2.1.珍珠模型 pearl 總覽 2.2.purpose 建立自動化測...