摘 要: 探讨了一种基于数据驱动的自动测试框架D-Arch的设计与实现。该系统使用开放源码的自动测试工具Selenium,具有模块化、可重用、测试与开发松耦合,可满足不同测试需求的特点。
关键词: 自动测试框架;测试工具;模块化
随着Internet的飞速发展,Web应用程序的规模与复杂性达到了一个前所未有的高度,Web应用的质量也越来越受到人们的重视。但软件的手动测试非常耗时,劳动强度高,并且很单调,而且还会引入一些人为的错误,因此测试自动化势在必行。通常自动化测试是指在预设条件下,利用测试自动化工具自动运行软件,通过实际结果与期望结果的比对,达到评估软件质量的目的。实现测试的自动化不仅能够大大减轻测试人员的工作量,还能够减少测试过程中人为出现的错误。在实际应用中,自动化测试技术衍生出了若干研究方向,例如:测试框架、测试脚本技术、测试用例自动生成以及自动化安全测试等。由于使用自动化测试工具进行完全测试存在着各种局限性,自动化测试框架应运而生。但是在工作与实践中,目前尚没有一种通用的自动测试框架以适应不同的测试需求。为了适应科研与工作的需求,开发设计了一种通用的基于数据驱动的自动测试框架,命名为D-Arch。
框架是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。从框架的定义可以了解,框架可以是被重用的基础平台,也可以类似于组织架构。
所谓自动化测试框架,即是应用于自动化测试所用的框架。按照框架的定义,自动化测试框架要么是提供可重用的基础自动化测试模块,如selenium、watir等,它们主要提供最基础的自动化测试功能,比如打开一个程序,模拟鼠标和键盘来点击或操作被测试对象,最后验证被测对象的属性以判断程序的正确性;要么是可以提供自动化测试执行和管理功能的架构模块,如robot,STAF等,它们本身不提供基础的自动化测试支持,只是用于组织、管理和执行那些独立的自动化测试用例,测试完成后统计测试结果,通常这类框架一般都会集成一个基础自动化测试模块,如robot框架就可以集成selenium框架。
1 自动化测试框架的类型
目前普遍存在的框架有以下几种:
(1)数据驱动框架:当测试对象流程和应用逻辑固定不变时,可以采用数据驱动框架。此时,测试使用的输入数据来自外部数据源(例如数据库、Excel表、XML、cvs文件等)[1],这些数据通过代码脚本装载到测试系统中,从而驱动系统运行。最后,测试产生的数据也将保存到外部数据中,通过输入输出数据的比对,完成系统的测试。
(2)关键字驱动框架:又叫表驱动,这种框架需要表和关键字[2]。表和关键字独立于被测系统,被测系统的每个功能和每个测试的具体执行步骤被放入表中,利用表中的关键字驱动被测系统运行。
(3)混合型的框架:这种测试框架同时具有数据驱动型和关键字驱动型框架的优点。常常是由单一框架在不断应用发展中演化而来的。
2 D-Arch框架
D-Arch是为解决开发与测试之间紧密耦合问题而产生的测试框架。系统通过建立测试与开发人员共同定义和遵循的软件元数据的关联——元数据映射表,在测试与开发之间建立了松耦合关系。不论是测试人员修改测试脚本或数据,还是开发人员修改软件,只需要更改元数据映射表,测试与开发人员的现有工作不受影响,可以同步进行。这样,大大减少了编写和调试测试脚本的工作量,更好地实现自动化测试。
D-Arch框架初始运行时,从某个数据源(例如ODBC数据库、Excel文件、csv文件、XML文件等)读取输入测试数据。输入数据通过变量传入事先录制好的或手工编写的测试脚本中,经过被测系统的运行,得到实际输出数据。然后D-Arch框架通过对实际输出数据与数据源中的期望输出数据比对,从而得到最终的测试结果。在这个过程中,数据源的存取、测试状态和其他测试信息都被编写到测试脚本中。测试的输入输出数据只保存在数据源中,测试脚本驱动被测系统运行,在需要输入数据时,自动从数据源加载输入数据。系统运行结束时,从数据源加载期望输出数据与实际输出数据比对。那么,测试脚本不包含任何测试数据,测试数据的更改独立于测试脚本。测试脚本只是一个“驱动”,或者说是一个传送数据的机制。
D-Arch采用多层结构,主要包含的层次和模块如图1所示。
(1)管理平台
管理平台是针对测试活动管理、执行和报告的中央控制台,主要用于与测试人员交互。测试人员利用此平台输入测试数据,控制测试进程,获取测试结果及报表。管理平台主要完成以下任务:运行控制的决策系统,负责建立并维护运行队列,控制运行策略;管理平台负责维护一个测试任务的队列,利用决策系统控制队列中每个测试任务的开始执行的时间和状态,根据一系列标志对其进行控制。
(2)工具
工具是例如字符串处理、文件处理、数据库访问、缓冲处理、日志记录等程序,它们为D-Arch框架提供基础支持。工具包括所有模块都可能用到的操作方法,其抽象了不同模块特性,比如操作Excel表的方法、读写测试报告、驱动引擎等。
(3)工作域
工作域是测试系统框架的执行端,根据管理平台的决策系统,来执行运行队列中的测试脚本,其中运行控制的执行系统负责分配测试脚本,并按照指定策略启动脚本等也是工作域的功能。
(4)数据驱动脚本
数据驱动脚本就是那些和被测系统相关联的脚本,其中记录了被测系统的运行流程。数据驱动脚本一般通过录制或手工编写得到,采用自动化工具私有的语言。D-Arch框架运行时,利用数据源中的数据对其中的变量赋予合适的数值,作为测试数据的输入。这些变量作为被测系统输入的媒介,使脚本能通过外部的数据来驱动应用程序。
(5)报表
报表功能的基本要求是通过查询/统计/分析,提供用户所需的准确的数据。系统引擎本身支持报表功能,所以在报表模块,只需要定义报表数据以及格式,测试完成后,报表将自动生成。
(6)引擎
D-Arch系统的引擎主要基于开源测试框架TestNG开发。TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类、多个包甚至多个外部框架组成的整个系统,例如运用服务器)。相比较于JUnit,TestNG可以用于集成测试,这个特性是D-Arch选择TestNG最重要的原因。通过TestNG,D-Arch系统可以非常简单的实现与Selenium WebDriver、数据系统、报表系统的连接。
(7)Selenium WebDriver
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla和Firefox等[3]。D-Arch通过SeleniumWebDriver就可以直接调用浏览器,从而模拟出人工测试的效果。
D-Arch系统采用数据驱动模式的优点如下:
(1)基于测试与开发之间的松耦合关系,只要业务逻辑确定,在应用程序开发的同时就可以同步创建测试脚本,而且当业务逻辑变动时,只需要修改业务功能部分的脚本;
(2)基于模块化设计,最大限度地避免了重复的脚本,减少创建或维护脚本的成本;
(3)测试输入数据,实际输出数据和期望的输出数据与脚本分开,存放在另外的数据源中,便于测试人员修改和维护;
(4)由于测试脚本和测试数据的分离,便于自动化测试开发人员创建数据驱动的测试脚本,测试员创建测试数据;
(5)系统在测试的过程中收集实际输出数据,与数据源中的期望输出数据比对,并形成各种不同形式的报表,大大减少了手工结果分析的难度和工作量。
参考文献
[1] 曾北滨.自动化测试框架的研究与实现[D].武汉:武汉大学,2004.
[2] 朱菊,王志坚,杨雪.基于数据驱动的软件自动化测试框架[J].计算机技术与发展,2006,16(5):68-70.
[3] JAMES M S. System Testing of Desktop and Web Applications Information Systems Education Journal[J]. 2011,9(3):68-82.