基于Web的自动化测试框架的研究与实现

2012-06-09 10:26:08樊付星黄大庆
电子设计工程 2012年20期
关键词:关键字测试用例脚本

樊付星,黄大庆,周 未

(1.南京航空航天大学 电子信息工程学院,江苏 南京 210016;2.南京航空航天大学 无人机研究院,江苏 南京 210016;3.南京军代局驻南京大桥机器厂军事代表室 江苏 南京 211101)

为了提高测试效率,越来越多的测试工作引入了自动化测试的思想和方法。尤其随着Web应用的越来越复杂,对Web应用的测试也提出了更高的要求,也对测试带来了诸多问题如测试中重复的和非智力性的工作量越来越大。实践证明,软件自动化测试技术提高了软件测试的速度和效率,节省了软件测试成本,缩短了产品发布周期。同时,自动化测试技术也完成了许多手工测试无法实现的工作。所以,采用自动化测试方法和相应的测试框架成为了软件开发组织测试工作的重要支撑手段。但是自动化测试如果没有经过良好的设计,不但耗资大,而且还需要大量的维护工作。而设计良好的自动化测试框架不但维护成本低,且效率较高。因此,对Web自动化测试框架的研究具有重要意义[1]。

自动化测试框架就是一个由假设、概念以及为自动化测试提供支持的实践的集合[2]。文中描述了5种基本的自动化测试框架:模块化测试脚本框架,测试库构架框架,关键字驱动测试框架,数据驱动测试框架,混合自动化测试框架。现有的框架大多是在具体工具的基础上而建立起来的,如QTP、WinRunner等,ACRAT框架没有使用现成的测试工具,这也就避免了使用工具的不足。

1 自动化测试的优点及局限性

自动化测试具有以下优点:1)令软件新版本进行回归测试的开销最小。2)可以在更短的时间内完成更多的测试。3)可以完成一些手工测试不能或难以完成的测试。4)测试具有一致性和可重复性。5)更好地利用资源。6)测试的复用性高。7)可以更快地将软件推向市场。

自动化测试并不是万能的,自动化测试所完成的功能也有一定的局限性,主要表现在以下几个方面:1)某些情况下不宜使用自动化测试。2)自动化测试对测试质量的依赖性极大。3)自动化测试工具本身并不具有灵活性。4)自动化测试不能提高有效性。5)自动化测试比手工测试发现的缺陷更少。6)自动化测试可能会制约软件开发。

通过以上分析可看出自动化测试并不能完全取代手工测试。认识到软件自动化测试的这些局限性有助于我们更加合理的对软件测试进行自动化,通过自动化测试与手工测试的完美结合,充分发挥各自优势,以达到更好的测试效果。

2 常用自动化测试框架

以下论述5种基本的自动化测试框架[3-5],这些框架是了解自动测试框架以及根据自己的需要和经验来设计自己的自动测试框架的基础。

2.1 测试脚本模块化框架

测试脚本模块化框架是通过创建小的独立的脚本来代表被测试应用程序的模块和函数,然后用一种分层的方式将这些小脚本组成更大的测试,从而实现一个特定的测试用例。

为了提高自动化测试套件的可维护性,测试脚本模块化框架应用了抽象和封装的原则。它采用了一个很著名的编程策略,就是在一个部件前面构建一个抽象层以掩藏应用程序其它的部件。它把应用程序从部件的修改中隔离出来,并规定了在应用程序设计中的模块性。这种测试框架在以后所提到的各种框架中是最容易精通和掌握的。

2.2 测试库构架框架

测试库构架框架和测试脚本模块化框架非常相似,有着同样的优势。但是它把被测应用程序分成过程和函数,而不是脚本。这种框架要求创建库文件来代表被测应用程序模块、零件或函数,然后这些库文件被测试用例脚本直接调用。

2.3 数据驱动测试框架

将数据驱动脚本技术运用到自动化测试框架中就形成了数据驱动测试框架。这种框架从某个数据文件(例如ODBC源文件、Excel文件、.CSV文件、ADO对象文件等)中读取输入、输出的测试数据,然后通过变量传入事先录制好的或手工编写的测试脚本中。其中,这些变量被用作传递(输入/输出)用来验证应用程序的测试数据。在这个过程当中,数据文件的读取、测试状态和所有测试信息都被编写进测试脚本里;测试数据只包含在数据文件中,而不是脚本里,测试脚本只是一个“驱动”,或者说是一个传送数据的机制。

数据驱动的自动化测试利用相同的测试过程测试不同的输入、输出组合。它将测试输入和预期输出组织为表,表中的一行对应一个测试。然后创建一个从表中逐行读入的自动化测试过程,执行每个输入步骤,并检验预期结果。当把数据驱动测试过程放在一起后,就可以反复使用该过程来执行新测试。这种手段对于有很多不同数据选项的应用来说最有效。

2.4 关键字驱动测试框架

到目前为止,比较理想的自动化测试框架是“关键字”驱动的自动化测试框架,有时候也称为表驱动自动化测试框架,它是对数据驱动自动化测试的有效改进和补充。这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动”待测应用程序和数据的测试脚本代码,使自动化测试框架独立于应用程序。关键字驱动测试看上去与手工测试用例很类似。在一个关键字驱动测试中,把待测应用程序的功能和每个测试用例的执行步骤一起写到一个表中。

2.5 混合自动化测试框架

最普遍的执行框架是上面介绍的所有技术的一个结合,取其长处,弥补其不足。这个混合测试框架是由大部分框架随着时间并经过若干项目演化而来的。

3 ACRAT框架的设计

ACRAT框架式基于数据驱动测试方法学[6-7]的一种测试框架,可以实现脚本的重复使用,明显降低测试脚本的规模。数据驱动模型如图1所示。

图1 数据驱动模型Fig.1 Data-driven module

3.1 ACRAT框架的设计思路

测试框架应具备如下特点:测试流程总体控制,测试数据驱动,测试框架独立性,测试模块的原子性以及测试模块的可扩展性。

框架应满足的策略有:1)框架与应用程序相互独立;2)框架必须容易进行维护和扩展;3)框架所包含的测试策略和设计必须与框架无关;4)框架所包含的测试策略和设计方法必须易于测试人员使用;5)框架拥有自己的测试库;6)框架能够易于进行测试设计的重用和管理。

3.2 ACRAT框架结构

ACRAT由主程序、模块、测试函数库、Action文件、Data文件、支持工具和测试结果等组成,图2描述了ACRAT自动化测试框架的结构。

图2 ACRAT框架的结构Fig.2 Structure of ACRAT framework

3.2.1 主程序

当进行测试时,主程序Acrat.pl被调用执行。根据命令行参数执行不同的命令,首先是将文本文件编写的testcase编译(Acrat.pl-buildex=BEP)到 XML文件中,然后读取 XML文件,根据XML文件读取测试用例环境及测试用例状态,并在每个testcase执行前配置好环境,同时触发数据驱动引擎来解析测试用例文件,并根据解析结果来调用相应的功能函数,以及调用数据文件中的数据关键字来执行测试,当某个测试用例执行完后,程序会删除该测试用例的测试环境,然后进行下一个测试用例的测试。

3.2.2 模块

ACRAT中的模块包括专业模块、框架以及公共模块。专业模块则包括处理特定的功能或者协议所需要的支持函数,例如 perl中的各种模块(Win32::IEAutomation)。这些功能模块都放在函数库lib中。框架和公共模块包含一些框架和公共函数,例如数据驱动引擎。ACRAT框架将一些配置信息以全局变量的形式定义在了公共模块中,这些配置包括文件目录、数据目录、测试组合目录、log目录以及一些服务、proxy的配置等。

3.2.3 测试库函数

测试库函数就是由测试人员自己编写的功能函数,根据具体的测试要求,实现相应的功能,供执行脚本时调用,帮助测试人员实现自动化,例如,打开IE,浏览网页,匹配某一个关键字就可以定义一个函数BrowseURL()。

3.2.4 Action文件

Action文件记载了某个测试用例所要执行的函数的集合,每一个测试目标都包括多个测试用例,每一个测试用例又由一系列的测试步骤完成,每个测试步骤由逻辑关键字代表的低层次脚本,加上数据关键字代表的测试数据组合而成。如图3所示,此即为Action文件中的一个测试用例。

图3 Action文件Fig.3 Action file

3.2.5 Data文件

Data文件中保存了所有要用到的测试数据,测试数据是特定测试产品和测试组合的测试数据,例如输入数据及期望的结果。当执行某一个测试用例的时候,主程序会将这些数据以变量的形式传送给相应的函数。

3.2.6 支持工具

ACRAT框架目前只支持Firefox和IE浏览器,通过MozRepl来控制Firefox浏览器,通过AutoIt工具对Windows GUI(图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。该框架可以根据自己需要,添加相应的工具,或者开发一些工具。

3.2.7 测试结果

测试结果组件收集测试结果信息,包括一个测试结果总结,如测试执行了几个测试用例、执行时间以及成功、失败的用例数;还包括一个失败的测试用例执行的详细信息,该测试用例失败了,记录了具体是哪个函数失败了,以便于检测。

4 测试流程

当运行主程序Acrat.pl时,开始测试。主程序是一个perl脚本程序。它初始化测试环境,解析配置文件,启动数据驱动引擎,根据XML文件对测试用例的描述,从Action File中获得测试用例所要执行的测试步骤,从Data File中获得数据关键字,测试结束后获得测试结果。

整个自动化测试依赖于主程序Acrat.pl,根据参数,可以有选择的执行单个测试用例或者全部测试用例,例如Acrat.pl-prefix=测试用例xxx-debug,这就是单独执行测试用例xxx。主程序对配置信息,测试用例解析,从Action File中获取测试用例所要执行的功能函数,然后通过驱动自动测试脚本调用功能函数来执行测试用例,最终获得测试结果。

5 结束语

文中提出了一种基于Web的自动化测试框架,它是以数据驱动方法学为基础设计出来的,可以应用在不同类型的项目的测试过程中,该框架具有独立性、脚本共享、可扩展性等特点,在应用时可以根据项目自身的特点对其进行扩展和改进。但还存在不足之处,如何更好地设计测试用例和函数库,以避免在一个用例运行失败导致所有相关的测试用例失败[7]。而且该框架与 STAF(Software Test Automation Framework)结合使用,可以实现跨平台并行测试,这些都是以后重点研究的方向。

[1]朱少民.软件测试方法和技术[M].北京:清华大学出版社,2005.

[2]赖利峰,刘强.Web应用程序的一种功能自动化测试模型与实现[J].计算机工程,2006,32(17):42-44.LAI Li-feng,LIU Qiang.A model and implementation of function test automation for web applications[J].Computer Engineering,2006,32(17):42-44.

[3]李晓会.Web系统自动化功能测试框架研究与实践[D].北京:北京邮电大学,2011.

[4]曾北溟.自动化测试框架的研究与实现[D].武汉:武汉大学,2004.

[5]王光源.Web应用的自动化测试[D].济南:山东大学,2006.

[6]朱菊,王志坚,杨雪.基于数据驱动的软件自动化测试框架[J].计算机技术与发展,2006,16(5)68-70.ZHU Ju,WANG Zhi-jian,YANG Xue.A software automation test frameworks based on data-driven automation methodology[J].Computer Technology and Development,2006,16 (5)68-70.

[8]Mike K.Choosing a Test Automation Framework[S].IBM Developer.

猜你喜欢
关键字测试用例脚本
酒驾
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
华人时刊(2022年1期)2022-04-26 13:39:28
安奇奇与小cool 龙(第二回)
基于SmartUnit的安全通信系统单元测试用例自动生成
成功避开“关键字”
数据库系统shell脚本应用
电子测试(2018年14期)2018-09-26 06:04:24
基于混合遗传算法的回归测试用例集最小化研究
快乐假期
中学生(2017年19期)2017-09-03 10:39:07
基于依赖结构的测试用例优先级技术
基于用户反馈的关系数据库关键字查询系统