軟件測試工具QTP面向對象的框架

發表于:2010-09-08來源:作者:點擊數: 標簽:軟件測試工具框架qtpQTP
軟件測試工具 QTP 面向對象 的框架 這種框架的核心思想是把某個窗口的測試對象和相關業務核心操作都封裝在 VB S的類中,稱之為GUI層,或者叫GUI-業務橋接層。例如下面的登錄界面類: ' 登錄界面類,封裝了界面對象數據以及相關業務操作 Class Login Private

軟件測試工具QTP面向對象的框架

這種框架的核心思想是把某個窗口的測試對象和相關業務核心操作都封裝在VBS的類中,稱之為GUI層,或者叫GUI-業務橋接層。例如下面的登錄界面類:

  ' 登錄界面類,封裝了界面對象數據以及相關業務操作

  Class Login

  Private m_htChildObjects 'As Scripting.Dictionary

  Public Property Get ChildObjects()

  Set ChildObjects = m_htChildObjects

  End Property

  Public Property Let ChildObjects(ByRef dic)

  Set m_htChildObjects = dic

  End Property

  ' 初始化界面對象并驗證對象是否存在

  Public Function Init()

  ChildObjects = CreateObject("Scripting.Dictionary")

  With ChildObjects

  .Add "LoginDialog", Dialog("text:=Login")

  .Add "AgentName", ChildObjects.Item("LoginDialog").WinEdit("attached text:=Agent Name:")

  .Add "Password", ChildObjects.Item("LoginDialog").WinEdit("attached text:=Password:")

  .Add "Submit", ChildObjects.Item("LoginDialog").WinButton("text:=OK")

  End With

  'IsContextLoaded is a function that iterates through the Dictionary and checks if the GUI objects "exist"

  Init = IsContextLoaded(ChildObjects) ' 檢查界面層對象是否存在

  End Function

  ' 與界面對象綁定的各類業務操作

  ' 測試數據從GlobalDictionary中獲取(放在Data層),這里把測試數據做成函數參數可能會更好?!

  Public Function SetUsername()

  ChildObjects.Item("AgentName").Set GlobalDictionary.Item("AgentName")

  End Function

  Public Function SetPassword()

  ChildObjects.Item("Password").Set GlobalDictionary.Item("Password")

  End Function

  Public Function Submit()

  ChildObjects.Item("Submit").Click

  End Function

  End Class

  Public Function CreateLogin()

  Dim objLogin

  Set objLogin = New Login

  Set CreateLogin = objLogin

  End Function

  在業務層的類中封裝業務操作流程的代碼,例如下面的登錄流程:

  ' 登錄業務類,封裝了登錄過程的業務操作流程

  Class do_login

  Public Default Function Run()

  Dim intStatus

  Set objLogin = CreateLogin() ' 調用GUI層的Login類

  If objLogin.Init() Then ' 如果所需的界面對象都存在,則執行業務操作流程

  objLogin.SetUsername()

  objLogin.SetPassword()

  objLogin.Submit()

  intStatus = micPass 'If login suclearcase/" target="_blank" >cceeds

  Else

  intStatus = micFail

  End If

  Run = intStatus

  End Function

  End Class

  Public Function Create_do_login()

  Dim bzLogin

  Set bzLogin = New do_login

  Set Create_do_login = bzLogin

  End Function

  這種寫法的好處,除了可以細粒度地抽象、分解業務的測試代碼,提高可重用性外,還可以在業務層的代碼執行前,先讓界面層檢查驗證所需的測試對象是否都存在( 例如上面代碼中的objLogin.Init() ),避免了QTP在運行過程中碰到對象不存在的時候卡住的現象。

  在界面層的Init方法中,通過描述性編程把測試對象都存入Dictionary中,然后用IsContextLoaded方法遍歷對象,檢查是否在運行時都存在:

  ' 檢查界面層對象是否存在并寫入測試報告

  Public Function IsContextLoaded(ByRef htContext)

  Dim ix, items, keys, strDetails, strAdditionalRemarks

  IsContextLoaded=true

  items = htContext.Items

  keys = htContext.Keys

  For ix = 0 To htContext.Count-1

  IsContextLoaded = IsContextLoaded And items(ix).Exist(0)

  strDetails = strDetails & vbNewLine & "Object #" & ix+1 & ": '" & keys(ix) & "' was"

  If IsContextLoaded Then

  intStatus = micPass

  strDetails = strDetails & ""

  strAdditionalRemarks = ""

  Else

  intStatus = micWarning

  strDetails = strDetails & " not"

  strAdditionalRemarks = " Please check the object properties."

  End If

  strDetails = strDetails & " found." & strAdditionalRemarks

  Next

  Reporter.ReportEvent intStatus, "IsContextLoaded", strDetails

  End Function

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97