• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件测试工具QTP面向对象的框架

发布: 2010-9-08 09:48 | 作者: 网络转载 | 来源: 领测软件测试网采编 | 查看: 166次 | 进入软件测试论坛讨论

领测软件测试网

软件测试工具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 succeeds

  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

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: qtp QTP 工具 框架 面向对象 软件测试


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网