技术开发 频道

Rational Robot的自动化功能测试框架

【IT168 技术文章】

1. 前言

  测试本身就是一项异常艰苦的工作,而成功的进行自动化的功能测试,对很多软件开发组织来讲,更是困难重重。本文介绍了构建在IBM Rational Robot基础之上的自动化功能测试框架,来帮助组织更好的进行自动化的功能测试。

2. 现实的挑战

2.1 自动化测试的迫切需求

  随着业务的变化,软件产品的种类越来越多,软件产品的升级越来越快,在很多的软件开发组织中,测试部门承受着巨大的压力,他们一方面要测试越来越多的软件产品,一方面要应对越来越短的测试时间,同时,还要面对捉襟见肘的测试资源。

  每个版本发布都包括新增加的功能和已有的功能,已有的功能已经在以前的版本中进行过测试,但是还需要在此版本中执行回归测试。在这种情况下,测试部门往往会考虑到,既然回归测试的测试用例都已经存在并且已经在上一个版本中执行过,那么在新版本中能否自动的执行这些测试?如果能这样的话,将极大的节省时间和资源,将有限的资源投入到新功能的测试上,缓解测试的压力。

  通常情况下,软件开发组织会使用自动化测试工具,使用录制回放方式来进行功能测试的自动化。但是录制回放方式并不能解决全部问题。

2.2 录制回放中存在的问题

  业界的经验表明,虽然录制回放方式能够快速的生成测试,但是仅仅单纯的使用录制回放是不够的。

  首先,也是最主要的原因,就是使用录制回放方式,往往需要耗费时间和资源来调试、维护脚本。这些工作量随着脚本数量的增加,可能会增大到几乎不可能再对脚本进行有效维护的地步;其次,使用录制回放方式,要求应用已经开发完成并且在录制中不出现错误,但是往往当应用达到此条件时已经没有足够的时间进行测试;最后,使用录制回放方式,要求每个测试人员均会使用测试脚本语言“编程”,而当前大多数软件开发组织测试人员专注于业务,往往没有兴趣和精力来“编程”。

  所以,录制回放方式并不能解决所有的问题,在自动化的功能测试上,需要有测试框架的支持。

3. 解决之道

3.1 概述

  IBM Rational Robot是一款优秀的自动化测试工具,自动化功能测试框架是基于Robot之上构建的。如下图:

  图 1. 基于Robot的自动化功能测试框架

   业务测试人员类似于当前软件开发组织中使用手工执行测试的测试人员。可以看到,在解决方案中,除传统的业务测试人员外,增加了技术测试人员角色。技术测试人员偏重于自动化测试相关技术,实际上并不直接执行测试。

  解决方案的核心是使用Robot的SQABasic脚本开发的Robot测试技术框架。此Robot测试技术框架以表驱动为指导思想,读入动态结构,解释并执行动态结构中的每一项,是自动化测试的引擎。同时,为了提高Robot测试技术框架的易用性,在解决方案中还包括测试设计工具,它是使用其它编程语言,比如JAVA、Dephi等开发的应用程序。在测试设计工具中,测试技术人员首先建立和待测试应用一一对应的静态结构,此静态结构以页面为单位,随后业务测试人员从静态结构中选择不同的页面,组成测试动态结构,即测试用例,随后,此动态结构被Robot测试技术框架读入并解释执行。

3.2 Robot测试技术框架

3.2.1 表驱动介绍

  Robot测试技术框架是基于表驱动测试思想。表驱动测试就是预先在表中定义清楚代表每一步执行操作的关键字,然后由脚本读入表中的每一行,根据关键字来执行对应的动作。以CQ Web登录界面为例:

        图 2. ClearQuest Web登录界面

  当要自动执行“登录”按钮时,可以如下图来定义此表:

  登录

  然后在Robot的脚本中,打开表,读入此行并执行。这样的话,Robot便去点击界面上的“登录”按钮了。

  打开文件

        Dim sData() as string
        InFileName = getExcelFileName
        ReadExcelData InFileName, sData()

        ===============================
        解释并执行

        Select Case (sKeyWord)
        Case "登录"
              Window SetContext, "currentwindow", ""
              PushButton Click,  "Text=登录", ""

  以上是表驱动的简单示例。在自动化测试中,基于表驱动,还需要解决以下问题:对象识别、验证点、数据池、分支执行、数据关联、日志记录、调用其它脚本、脚本结束。本节将分别展示其在Robot测试技术框架中的实现方式。

3.2.2 对象识别

  根据IBM Rational Robot识别对象并执行操作的要求,如果要让Robot找到界面上的对象并执行相关动作,需要给Robot指定每个对象的对象类型、对象标志、执行动作和数据,如下图所示。

        图 3. 为Robot指定每个对象的对象类型、对象标志、执行动作和数据

        以按钮举例来讲,如果要让Robot自动点击某个按钮,那么首先要告诉Robot需要在“Button”这种类型的对象上进行操作;其次要告诉Robot,在此类型的对象上要执行什么操作,比如click;第三要告诉Robot要click那个具体的按钮上,比如要click“登录”按钮。

        表 2:对象识别表
        动作类型     对象类型     对象标志     执行动作     数据
        G            Button           确定          Click
        G            EditBox          姓名         Click       Jack
        G            ComboBox      角色列表      Click     系统管理员
        G            RadioButton     区域           Click

        在Robot测试技术框架中,相应的处理为:

        打开文件

        Dim sData() as string
        InFileName = getExcelFileName
        ReadExcelData InFileName, sData()

        ===============================
        对文件中每一行

        Select Case (sObjType)
        Case "Button"
            ProcessButton(sObjAction, sObjData, sData)
        Case “EditBox”
            ProcessEditBox(sObjAction, sObjData, sData)
        Case “ComboBox”
            ProcessComboBox(sObjAction, sObjData, sData)
        Case “RadioButton”
            ProcessRadioButton(sObjAction, sObjData, sData)

        ===============================
        对按钮执行的动作

        Select Case(sObjAction)
            Case “Click”
                Window SetContext, "currentwindow", ""
                PushButton Click,  "Text=" & sObjData, ""

        ===============================
        对文本框执行的动作

        Select Case(sObjAction)
            Case “Click”
                EditBox Click, "Name=" & sObjData, ""
                InputKeys "^+{HOME}{DELETE}"
                InputKeys sData
        ===============================
        对组合框执行的动作

        Select Case(sObjAction)
            Case “Click”
                ComboBox Click, "Name=" & sObjData, ""
                ComboListBox Click, "Name=" & sObjData, "Text=" & sData

        ===============================
        对单选按钮执行的动作

        Select Case(sObjAction)
            Case “Click”
                RadioButton Click, "Name=" & sObjData

  要强调的是,以按钮为例,虽然在表中需要为界面上每一个具体的按钮定义一行,但是在测试技术框架中,所有按钮处理的代码都是一样的。
3.2.3 验证点

  没有验证点的自动化测试就不能称之为测试。从这句话中就可以看到验证点在自动化测试中的重要性。对于验证点来讲,因为不同的测试、不同的应用验证点都不相同,所以Robot测试技术框架仅仅提供了扩展的机制,不同的验证点可以通过扩展机制加入到测试技术框架中。

  加入验证点之后,表的定义如下:

        表 3:对象识别表
        动作类型     对象类型     对象标志     执行动作     数据
        G             Button              确定            Click
        G             HTMLLink        链接            Click
        G             ComboBox       角色列表     Click          系统管理员
        G             RadioButton    区域             Click
        V             VP                    VP_SUM      VP_SUM     24

  最后一行是加入的验证点。所有的验证点其对象类型均为VP,不同的验证点有不同的对象标志,上表中的验证点是VP_SUM,验证点的基线数据为24。

        在Robot测试技术框架中,处理如下:

        对文件中每一行

        Select Case (sObjType)
        Case ……
            Process……
        Case “VP”
            ProcessVP(sObjAction, sData)

        ===============================
        对验证点执行的动作

        g_VP_SUM_Baseline = sData
        Callscrīpt sObjAction

        ===============================
        验证点脚本的处理

        sData = g_VP_SUM_Baseline
        SQAGetProperty “”, “”, sActual
        if sData = sActual then
            ……
        else
            ……
        end if

  将验证点的基线数据放入全局变量g_VP_SUM_Baseline中,然后使用Callscrīpt函数来调用验证点的脚本。对每一个验证点单独的创建一个脚本文件,脚本文件的名字和验证点的标志相同,都是VP_SUM。虽然各个验证点脚本的内容都不相同,但是一般的步骤是首先从全局变量g_VP_SUM_Baseline中取出基线数据,然后使用SQAGetProperty函数从界面上取实际的数据,再比较实际数据和基线数据。
 

0
相关文章