基于QTP的高速公路收费软件自动测试框架

2014-11-10 06:18
关键词:自动测试测试人员测试数据

束 进

(中海网络科技股份有限公司,上海200135)

0 引 言

随着我国高速公路建设的不断开展,高速公路收费系统已经遍布全国各地,在我国交通运输事业的发展进程中扮演着重要的角色。其中,高速公路收费系统软件的测试是保证高速公路收费系统软件质量的关键过程之一,对确保高速公路收费系统正常运行具有十分重要的作用。

随着各省高速公路规模的日益扩大,以及区域联网的开展,高速公路收费系统软件的规模也随之不断扩大,逻辑性不断加强,功能不断被拓展。因此,这些软件产品的系统测试变得越来越困难和复杂,传统的人工测试的局限性也越来越明显。自动化软件测试技术正是在这样的背景下受到了密切的关注,成了近年来软件测试的重要研究方向,被越来越多的应用在了软件测试的各个阶段。研究面向高速公路收费系统的自动化测试技术,目的是为了节省测试成本、提高产品的测试效率、缩短研发周期,从而满足客户对高速公路收费系统的需求。因此,设计并实现一种适合高速公路收费系统的自动测试框架具有重要的意义。

1 自动测试框架概述

所有能够有效组织和管理自动化测试中所必需的各个组件、能够有计划地执行自动化测试并且支持测试结果分析和测试过程改进的结构实例或文件实例都可以称作自动测试框架。

目前普遍存在的自动测试框架有以下几种:

1.数据驱动框架:当测试对象流程固定不变(仅仅数据发生变化)时,可以使用这种测试框架。测试数据是由外部提供的,如Excel表、XML等。

2.关键字驱动框架:这种自动测试框架提供了一些通用的关键字,这些关键字适用于各种类型的系统。此外,其还为自动化测试工具和被测系统提供了抽象性。例如,它可以使用相同的测试用例来测试类似的Web和Windows系统。关键字驱动的测试框架因为使用了外部的数据源(比如Excel数据表)读取脚本中的关键字和测试过程,所以较难调试。

3.混合型框架:这种自动测试框架同时具有数据驱动型框架和关键字驱动型框架的优点,不仅有通用的关键字,还有基于被测系统业务逻辑的关键字。

以上几种框架各有优缺点,对于较为复杂的软件,单独依靠数据驱动或关键字驱动无法完全满足软件的测试需求,一般会采用混合型自动测试框架。

2 对自动测试框架的需求

近些年,为了满足市场和客户的需求,公司高速公路收费软件的版本升级的频率越来越频繁,测试周期不断被压缩。让手工测试人员在有限的时间内去验证成百上千的测试用例,基本上成为了不可能实现的任务。由于传统的手工测试已经无法满足企业进行有效的软件测试,自动化测试技术应运而生,但是目前的自动化测试技术却很难在企业中得到实际应用。

1.软件变更引发的自动化测试程序的变更维护量超出了手工测试的工作量,使得自动化测试技术成为了一个“美丽的谎言”。

2.企业内大部分测试人员精通测试业务,但是不熟悉自动化技术;新招聘的自动化测试人员熟悉测试技术,而又不了解测试业务。二者资源无法在短时间内融合,使得企业无法接受需要投入的成本。

随着企业对自动化的期望越来越高,各类自动化测试工具逐渐热销。运用这些工具,基本上可通过录制技术快速地形成测试脚本进行一些参数化或检查点设置的脚本修正工作,而后点击回放按钮,就可以很“轻松”地完成一次软件测试。但是,后期大量的自动化测试脚本维护工作使得企业投入成为了一个无底洞。运用该方法不仅仅没有真正解决软件测试问题,反而造成“高投入、低产出”问题凸现,这使得很多企业不得不再重新回归到手工测试模式。

自动测试化框架就是为了组织在测试过程中被拆解细化的各个测试组件而存在的,能够有效组织和管理自动化测试过程中的活动,能够解决自动化测试中出现的问题。

一些成熟的自动测试框架已经广泛应用于软件开发项目中。其中,XUnit是基于测试驱动开发的测试框架,适用于单元测试,JUnit和Cpp Unit都属于XUnit;Apache JMeter是Web应用程序的性能测试框架,用于分析重负载情况下整个服务器的性能;Seleniu m是Thought Wor ks专门为Web应用软件设计的验收测试框架。然而,很难找到一个适合高速公路收费软件的自动测试框架,而这一框架就是所需要研究的方向。

3 基于QTP的高速公路收费软件自动测试框架

3.1 自动测试框架架构

QTP(Quick Test Professional)提供符合主要应用软件环境的功能测试和回归测试的自动化,采用关键字驱动的理念以简化测试用例的创建和维护。

然而,只使用QTP的录制回放功能得到的测试脚本去测试高速公路收费软件是有缺陷的。因为这些测试脚本是随机创建的,测试数据和软件操作混合在了一起,即使测出软件缺陷也很难进行追踪和重现,而且维护成本也是非常高的。

为此,设计了基于QTP的高速公路收费软件自动测试框架,由于高速公路收费软件涉及多个层级,较为复杂,采用混合型自动测试框架进行设计。该框架定义好了一组自动化测试的规范、测试脚本的基础代码,以及测试用例的集合。通过使用该框架,可以减少冗余测试代码,提高试代码生产率、可重用性和可维护性。此外,通过将该框架复用到很多类型相同或相近的项目中,还可大大节省测试成本。

图1 基于QTP的高速公路收费软件自动测试框架架构

基于QTP的高速公路收费软件自动测试框架架构见图1,分为以下几个部分:

3.1.1 测试数据层

测试数据层包括测试用例库和测试数据库。

(1)测试用例库包括对象库、业务组件库和函数库。测试用例是一系列测试步骤的集合,与手工测试中的一个或多个业务流程相对应。可以从测试用例中读取测试数据、设置检查点、生成日志文件、调用业务组件和公共函数。

被测应用程序所有对象被录制后都会被保存到一起,形成对象库。

业务组件是一些重用性比较强的测试脚本,通过调用业务组件,可以提高测试脚本的开发效率,降低测试脚本的维护成本。

函数库包含扩展函数和常规函数两大类,它们之间的区别在于是否跟被测应用程序控件有交互。

(2)测试数据是自动化测试的一个重要组成部分,包括输入数据、输出数据和检查点数据。所有测试数据都将按统一的规范管理,任何测试数据都不能被某个QTP脚本私有。

3.1.2 测试逻辑层

测试逻辑层包括批量执行列表和批量执行驱动器。

(1)批量执行列表包括了所有的测试用例。为了方便管理,通过设置测试用例的属性来决定是否执行该测试用例,以及在哪个环境中执行。

(2)批量执行驱动器是整个框架的核心,其主要工作包括控制测试用例的执行和生成测试报告。如果被测应用程序出现异常,驱动器将强行关闭应用程序及相关服务。

3.1.3 测试展示层

测试展示层主要是指测试报告。

批量执行驱动器将执行成功和执行失败的测试用例的个数,以及完成整个测试任务所用的时间记录下来,通过测试报告可以查询和打印测试的结果。

该自动化框架应具有以下特点:

(1)实现测试数据的统一管理,将测试数据从测试脚本中抽离出来;

(2)实现空间对象的统一管理,所有的控件对象都是独立于测试脚本的;

(3)实现测试脚本的模块化和封装性,提高测试脚本的可维护性;

(4)测试脚本可以批量执行,并且生成集成的测试报告;

(5)方便实施,不会因为引入自动化框架而增加额外的工作量。

使用该框架可以在无人监管的情况下实现多个测试用例连续执行,自动化脚本的运行过程为:

(1)测试人员通过启动驱动器执行自动化测试;

(2)驱动器从批量执行列表中读取第一个测试用例的ID,开始执行第一个测试用例;

(3)测试用例根据ID将相应的测试数据加载到QTP的Global Table中,并在指定的测试报告中记录每一步的测试结果;

(4)当第一个测试用例执行完毕后,驱动器再次回到批处理Excel文件中读取第二个测试用例的ID,如此循环下去,直到所有的测试用例执行完成;

(5)驱动器在测试报告中记录执行成功和执行失败的测试用例的个数,以及完成整个测试任务所用的时间。

3.2 测试数据层

3.2.1 测试数据

框架采用SQL SERVER数据库管理测试数据,所有测试都集中在该数据库里(每个项目对应一个测试数据库)。所有的测试数据使用完毕后都会被备份保存,下次测试类似项目时可以借用。

当执行到某一测试用例时,初始化函数会将其对应的测试数据加载到r unti me Data Table中去。当测试用例执行结束时,r unti me Data Table会被自动清空,并准备加载下一个测试用例的测试数据。

每组测试数据占用数据库的一个表,并按照测试脚本的ID进行命名和排序。每个表的每一行测试数据代表一次循环。一张表格内的测试数据不得重复,否则QTP无法正常读取数据(不同表间的测试数据没有限制)。

3.2.2 对象库

该自动化测式框架中的对象库被所有的测试用例和业务组件库共同拥有,被测试的应用程序的所有对象都会被录制并保存在对象库中,否则QTP脚本将无法正常运行。另外,为了便于维护对象库,任何对象都不能归某个QTP脚本私有。

3.2.3 函数库

该自动化测式框架中的函数库主要包含两大类函数:扩展函数和常规函数。它们之间的区别在于是否与被测应用程序控件有交互。

扩展函数中的活动与被测应用程序控件是有交互的,例如直接操作控件、对控件发出请求、或接受控件返回的信息。与QTP的函数相比,我们设计的扩展函数与被测应用程序的关系更加紧密,在测试脚本中的可用性也比较强,既能操作控件,又能察觉错误并进行纠正。

扩展函数为应用程序和QTP提供了一个中间层。有了这个中间层,自动化测试脚本对QTP的依赖就会减弱。即使是使用更新版本的QTP,自动化测试脚本也无需进行重大的改变,只需要调整扩展函数即可。

3.2.4 业务组件库

不同的测试用例间可能会有很多相同的测试步骤,如果将这些测试步骤组织成可以重用的业务组件,那么只需要调用业务组件就可以达到相同的测试目的。因此,框架采用了基于业务组件的脚本模型,可以实现测试脚本的模块化和封装性,提高测试脚本的编写效率和可维护性。

在该框架中,业务组件与函数的不同在于,函数实现了独立于应用程序业务逻辑的功能,例如系统变量设置和异常处理等。而业务组件实现的是与应用程序业务逻辑相关的测试活动,如登录、注册和退出应用程序等。函数库可以被不同的项目开发团队共享,业务组件却做不到这一点,被测应用程序不同,业务组件可能大相径庭。

3.3 测试逻辑层

实施自动化测试的一项重要工作就是执行自动化测试脚本。通常情况下,测试人员都是使用QTP中的运行命令来执行单个测试脚本。如果在执行过程中出现了问题,测试人员往往会直接中止运行,立即分析出错原因。用这种方法执行自动化测试时,测试人员在脚本运行期间必须一直在一旁观察,无法做其他事情,因此,在框架中建立了批量执行驱动器和批量执行列表。在批量执行多个QTP脚本时,能够实现:

(1)在无人监管的情况下批量执行;

(2)中间一个测试脚本出了问题,后面的测试脚本不会受到影响;

(3)测试数据互不干扰;

(4)生成集成的测试结果。

测试人员只需要事先在配置文件中将待执行脚本的运行状态改为TRUE,然后直接运行驱动器即可。驱动器首先会加载配置文件,然后创建记录测试结果所需的Excel文件;接着,读取配置文件中第一个脚本的名称,开始执行测试用例;如此循环,直到所有的测试执行完成;最后,驱动器计算出执行成功和执行失败的测试用例的个数,分别记录在测试报告的相应字段。

3.4 测试展示层

QTP自带的测试报告虽然方便易懂,但不适合在自动测试框架中使用,因为测试人员从中提炼出想要的信息往往要花很长时间。在自动化框架中,提供了测试报告生成功能,只须通过统一调用该功能,即可达到自动生成测试报告的目的。在测试用例执行的过程中,该功能可以将测试中产生的错误信息、日志信息、测试结果及其所属的测试步骤集成到Excel文件中。

测试人员可以点击测试脚本链接看到测试脚本每一步运行的详细结果,包括测试步骤简要描述、期望测试结果、实际测试结果等信息。测试人员通过详细结果部分,可以很容易地分析出测试执行失败的原因。

3.5 QTP与QC的连接

自动测试框架中提供接口,测试人员只需提供QC的登录信息和QTP工作目录的绝对路径,即可自动将多个QTP测试脚本连续上传到QC,无须进行监控。

3.6 高速公路收费软件的应用

高速公路收费软件一般由车道收费、票据管理、卡管理、财务管理、图片管理、参数管理、车道监视管理、运行管理、稽查稽核管理、数据传输管理、清分结算管理和费率管理等模块组成。

依据这些业务功能对其中可以执行自动化测试的子模块构建业务组件库;针对每个子模块识别对象库,建立公用函数库;依据业务流程建立对应的测试脚本,形成批量执行列表;通过基于QTP的自动测试框架执行自动化测试。

在实际使用了该框架进行项目测试后,发现这种框架设计非常有效。

1)减少了30%~50%甚至更多的脚本编写工作量;系统越大,优点越明显。

2)后期维护难度和工作量在统一管理下大幅度下降。

3)减轻了测试管理服务器的压力。针对所购买的QTP License较少的情况,通过框架的统一协调运行和管理,在很大程度上缓解了由于License有限带来的时效性不高的问题。

图2 业务功能的测试脚本结构

4 结 语

经过对高速公路收费软件的实际测试应用证明,基于QTP的智能交通软件自动测试框架具有测试周期短、测试质量高等特点,有效地提高了软件自动化测试中测试代码的可重用性和可维护性。

[1] 黄文高.QTP自动化测试与框架模型设计[M].北京:机械工业出版社,2008.

[2] 陈能技.QTP自动化测试进阶[M].北京:电子工业出版社,2010.

猜你喜欢
自动测试测试人员测试数据
论职务犯罪侦查中测谎技术的应用与完善*
基于VXI总线的实验箱自动测试装置设计
测试数据管理系统设计与实现
关于某型雷达自动测试系统的几点认识和建议
DCOM在混合总线自动测试系统的应用
浅析软件测试中的心理学应用
基于自适应粒子群优化算法的测试数据扩增方法
空间co-location挖掘模式在学生体能测试数据中的应用
绿植防辐射只是个传说,是真的吗?
基于ATE与BIT组合的NAMP自动测试与故障诊断系统设计