51Testing独家连载:(五十七)精通QTP——自动化测试技术领航

发表于:2012-3-05 10:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:余杰 赵旭斌    来源:51Testing软件测试网

5.2  GUI层面向对象的扩展设计

5.2.1  层的概念

  本章节主要介绍的是QTP的一种较为先进的技术,本技术是由AdvancedQTP SOLMAR自动化测试专家组所采纳的一种面向对象的设计模式,由Meir Bar-Tal于2008年12月20日发表,作者将会详细介绍此设计模式的每个类以及方法、设计模式的使用、设计模式的优缺点。

  此模式主要是通过QTP描述性编程以及装载GUI对象的Dictionary对象,通过业务驱动的方式来得到体现,最有价值的地方在于,其对象识别的先发机制,可以有效的防止QTP在运行时识别对象出现卡住的现象,当对象出现不匹配时,能使测试顺利退出,并在报告中具体定位细节。从而有效降低了测试的维护量,并节省了自动化测试的时间。

  自动化测试的核心问题就是如何减少维护量,例如,我们应该使用对象库还是描述性编程?如果选择“OR”,那么可以在每个Action中使用共享对象库或者本地对象库,那如果选择“DP”,可以有什么方式来实现吗?成本效益和可维护性是我们在做自动化测试中最为关注的,在此引出一个概念——GUI层扩展。这一概念经过SOLMAR自动化专家组的分析和观察已被采纳,使用它就可以尽可能地提高代码重用性(通过使用面向对象的方法来提高效率,并分解出若干个抽象层,可维护性较高)。

  前面已经提到了GUI层,那层的作用是什么呢?这里先简单解释一下,层可以使重用性发挥到最大极限,定义一个类(封装一个图形用户界面层)通过相应的接口来控制应用程序GUI界面中的测试对象,从而把这个类称之为GUI层。

5.2.2  封装测试对象类

  为了能够使大家更加容易理解此设计模式,在这里重新修改了原文中“层”的方法和对象,这里就通过把百度搜索页封装成GUI层作为一个最简单的例子来讲解,代码如下所示:

Class BaiduSearch

  Private m_htChildObjects      '定义变量作为Scripting.Dictionary

        '***************为变量设置Get Set 方法***************

  Public Property Get ChildObjects()

    Set ChildObjects = m_htChildObjects

  End Property

  Public Property Let ChildObjects(ByRef dic)

    Set m_htChildObjects = dic

  End Property

  '*************初始化GUI界面上的测试对象**************

  Public Function Init()

   ChildObjects = CreateObject("Scripting.Dictionary")

   With ChildObjects

    .Add "Browser", Browser("name:=百度一下,你就知道")

    .Add "Page", ChildObjects.item("Browser"). _

     Page("title:=百度一下,你就知道")

    .Add "SearchContent", ChildObjects.item("Page"). _

     WebEdit("html id:=k")

    .Add "Submit", ChildObjects.item("Page"). _

     WebButton("value:=百度一下")

  End With

  Init = IsContextLoaded(ChildObjects)

  End Function

  '**********业务行为函数 -  百度输入搜索内容***********

  Public Function SetSearchContent()

   ChildObjects.item("SearchContent").Set "zzxxbb112"  

  End Function

  '**********业务行为函数 -  百度点击搜索***************

  Public Function Submit()

   ChildObjects.item("Submit").Click

  End Function

End Class

  首先看程序中最外层的BaiduSearch类,它代表百度的一个GUI层。我们在类中定义了一个Scripting.Dictionary对象,并且为其设置Get/Let方法。接着是一个初始化的函数Init,这个函数主要的作用是,把页面内的所有对象全部封装在一个Scripting.Dictionary容器对象中,并通过描述性编程,及结合迭代式的对象封装,有效地提高了代码的重用性。最后还有两个业务行为函数,一个是在文本框中输入搜索内容的行为函数,另一个是点击搜索按钮的行为函数,这两个函数都是可以直接在字典对象中进行搜索关键字来定位对象的,并针对对象进行操作来达成关键字字典对象驱动。这样,一个“百度”的GUI层就已经封装好了,并且这个类还具备了两种业务行为函数的接口。

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号