设为首页 收藏本站
查看: 961|回复: 0

[经验分享] 如何做好SAP自动化测试

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-19 14:34:26 | 显示全部楼层 |阅读模式
如何做好SAP自动化测试

作者:卢晨之

本文出自51testing网杂16期

  
      本文主要研究了如何使用脚本语言或主流自动化测试工具QTP在SAP GUI上展开自动化的自动化测试。探讨了它们的弊端与优势,还有如何结合。
  
  前言:
  SAP GUI编写的语言是ABAP(Advanced Business Application Programming),一般情况下外部公司会购买SAP的部分模块并在原来SAP GUI的基础上做二次开发,所以大部分的SAP程序都是由原始版本放射出来的子版本,同样它也继承了SAP的大部分基层类、方法。
       当然,如何对一个GUI程序做自动化测试,我们需要了解的还有很多,还包括了它的构成,类对象,方法等等。
  
  了解SAP GUI的结构
       SAP GUI主要分成2层,一层是后台控件(Top level administrative objects),另一层是前台控件(Top level user interface objects)。在后台控件中,存在着一个层次鲜明的关系,正如下图所示:
  
  
  透过上面图片我们可以看到,后台控件的关系分别:GuiApplicaitonGuiConnectionGuiSession;前台控件包括了:GuiMainWindowGuiModalWindowGuiSession等等。而这些层次关系也是非常重要,因为我们需要靠它来得到我们需要操作的对象,下面是VBS脚本片段(GetSession.vbs):
  
  
  Dim SapGuiAuto
  Dim Application
  Dim connection
  Dim session
  If Not IsObject(application) Then
    Set SapGuiAuto = GetObject("SAPGUI")
    Set application = SapGuiAuto.GetScriptingEngine
  End If
  If Not IsObject(connection) Then
    Set connection = application.Children(0)
  End If
  If Not IsObject(session) Then
    Set session   = connection.Children(0)
  End If
  If IsObject(WScript) Then
    WScript.ConnectObject session,    "on"
    WScript.ConnectObject application, "on"
  End If
  
  
  
  上面的代码片示例了获取GuiApplicaitonGuiConnectionGuiSession。了解完了后台控件的关系图后,我们需要了解多一个前台控件的关系,就是我们所见到的SAP GUI,它们的关系如下图罗列的:
  

  在SAP GUI中,一般情况下每个Session下面就只有一个GuiMainWindow,而在这个对象下面,就都是我们能看到的对象,包括了GuiMenuBarGuiToolBarGuiUserArea等等。如何获取到它们?后面我们将再做介绍。
  
  SAP GUI对象模型
  SAP GUI的对象模型是面向对象的设计模式,它主要包括了4大个基类:GuiComponentGuiContainerGuiVComponent,,GuiVContainer。大部分对象继承了其中的一个或者多个类,但有小部分的对象是没有继承的,例如GuiScrollBarGuiComboBoxEntryGuiSessionInfo等等。
  
  纯脚本与SAP GUI
  有了前面对SAP了解的基础上,我们再使用SAP自带的SAPGUIScripting API为我们服务(SAPgui\SAPguihelp\SAPGUIScripting.chm),透过这个文档,我们能够获取到这些对象的方法,属性,以便展开我们的自动化测试工作。在实际自动化过程中,我们的操作主要都是针对对象,所以获取对象自然是我们一项非常重要的工作之一。因此,如何获取到SAP GUI的前台对象,也是我们需要学习的。
________________________________________________________________________

  
  获取对象的几个主要方法:
  

  • 1.        findById 这是获取SAP对象中,一个比较重要和常用的方法,传递进去的参数是对象的ID,而这里的ID我们也需要注意的是,这个对象的ID其实是一个路径,所以在不同父对象中使用findById时候,ID会有所不同,就好比下列代码中,同样是获取GuiToolBar,但ID却是不同。
  
              Set SapGuiAuto = GetObject("SAPGUI")
             Set application = SapGuiAuto.GetScriptingEngine
             Set connection = application.Children(0)
             Set session   = connection.Children(0)
             session.children(0).findById("tbar[0]")
             session.findById(“wnd[0]/tbar[0]”)
  

  • 2.        FindAllByNameFindAllByNameEx这2个方法是通过传递进对象名称与类型来查找当前对象下面的子对象,并返回一个对象的集合GuiComponentCollection。其中的FindAllByNameFindAllByNameEx的区别是传进去的对象类型名称或类型码(SAP中每个对象类型都有自己对应的类型码,例如GuiToolBar是101,GuiCheckBox是42),而这2个参数中,类型可以为空。
  

  • 3.        FindByNameFindByNameEx区别于第2中的2个方法,第3的这2个方法是直接返回了符合条件第一个对象,是一个GuiComponent而非GuiComponentCollection。如果通过代码去了解它,就是FindAllByName().Item(0)是一样的。
  

  • 4.        ChildrenParent属性无论是在SAP或者Web或者.net与VB,ChildrenParent这2个属性都是极为常见,它们获取到的分别是GuiComponentCollection与GuiComponent,也就是一个集合与一个对象,我们同样可以通过它们去获取我们想要的对象并做操作。
________________________________________________________________________

  
  打开SAP脚本录制开关:
  SAP公司是一家非常人性化与具有远瞩的公司,它同时考虑到SAP GUI的自动化在项目中的设施,所以SAP GUI后台就已经提供了简单的脚本生成工具,就如同微软的宏录制一样。而这个脚本录制之前,我们需要把开关打开,并且设置好录制完毕后脚本的名字。
     这个开关就放在了GuiSession下面,属性分别是RecordFileRecord。它们的操作顺序是先把FileRecord设置好(这里只需要设置文件名字,路径是默认为Documents and Settings\XXXX\SapWorkDir),再把Record设置为1并开始录制,到最后再把开关关闭。
  TestRecord.Vbs
  
             Set SapGuiAuto = GetObject("SAPGUI")
             Set application = SapGuiAuto.GetScriptingEngine
             Set connection = application.Children(0)
             Set session   = connection.Children(0)
             session.Recordfile="LuchenzhiTest.Vbs"
             session.Record="1" ‘关闭需要设置为0
  
  
________________________________________________________________________

  
  录制与修改脚本:
      录制完毕后,我们把开关关闭,在文件夹下可以看到如下代码片(LuchenzhiTest.Vbs):
  
             session.findById("wnd[0]").maximize
             session.findById("wnd[0]/tbar[0]/okcd").Text = "Test"
             WScript.Sleep 100
             session.findById("wnd[0]").sendVKey 0
             session.findById("wnd[0]/usr/ctx").Text = “LuchenzhiTest”
             WScript.Sleep 100
             session.findById("wnd[0]/usr/ctxt").caretPosition = 14
             session.findById("wnd[0]/tbar[1]/btn[8]").press
             session.findById("wnd[1]/usr/sub/ctxtZ").Text = "2"
             WScript.Sleep 100
             session.findById("wnd[1]/usr/sub/ctxtZ").SetFocus
             session.findById("wnd[1]/usr/sub/ctxtZ").caretPosition = 1
             WScript.Sleep 100
             session.findById("wnd[1]/tbar[0]/btn[0]").press
  
  
         但透过上面录制的方法,我们会看到我们的操作都被转化成为VBS的脚本,它的优点就是生成速度快,文件小,运行简单快捷。但它存在着下面的几点缺点:
  1, 缺乏稳定性 这点是所有脚本与自动化测试所需要面临的。我们需要更多的判断处理,事务等待,对象查找操作等等。
  2,方法单一,维护量大  生成的脚本中,都是使用了FindById的方法去查找对象,而会导致如果程序的对象发生变化,或者ID发生变化,都需要人员维护与修改。自然,我们可以结合上文中提到的其他方法去获取对象,来确保脚本运行顺畅。
  但尽管如此,缺乏良好的对象管理模式是非常吃力的。
  3,VBS缺乏强大的IDE支持

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115921-1-1.html 上篇帖子: SAP Sales and Distribution Processing Document Flow 下篇帖子: 一些有用的SAP技术TCODE收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表