田傲雪
(中国电子科技集团公司第十五研究所 北京市 100083)
随着软件工程新观点的提出,使得软件测试得到业界的重视,只有测试合格的软件才能进行实际应用。在这一背景下,为提高软件测试效率和水平,应当加快实现自动化测试。因此,除了要对测试用例进行自动构建之外,还应设计一款具备自动执行功能的脚本,并将它们全部融入到一个测试平台当中,实现自动运行与集中管理。
测试用例(Test Case)简称TC,是对特定软件产品进行测试任务的描述,具体包括如下内容:测试目标、环境、脚本以及最终形成的文档等。TC 的主要目的是将软件测试行为转换成便于管理的模式,可以指导测试的实施、规划测试数据的准备、编写测试脚本以及评估测试结果的度量基准等。
从本质的角度上讲,TC 为文档,它是执行实体中最小的一部分,通过TC 能够对软件程序进行测试,进而确定出程序的某些特性是否正常。在对TC 进行设计时,应当遵循如下基本原则:
1.2.1 正确性原则
向系统当中输入用户的实际数据,借此来检验系统是否满足使用要求,TC 中的各个测试点,应当确保能够覆盖使用需求的各项功能,且不得存在异常问题。
1.2.2 全面性原则
要对全部的需求功能项进行全面覆盖,设计出来的TC 除了能够对测试点进行测试之外,还应充分考虑用户的使用需要,以及关联使用情况和非正常操作等[1]。
为简化设计过程,在总结前人设计经验的基础上,提出一种全新的测试概念模型,即数据与脚本相分离,并在该模型上,对自动化的测试框架进行设计。
2.1.1 模型介绍
对于传统的测试脚本(Testing Script)而言,作为特定测试的指令,数据与执行逻辑为集成式,二者是以捆绑的形式被嵌入到测试系统当中。在实际应用中发现,此类测试脚本存在一定的不足之处,如灵活性差、可维护性不强等。鉴于此,提出一种全新的测试概念模型,该模型由以下三个部分组成:测试驱动器(TD)、测试用例(TC)以及测试计划(TP)。其中TP 与实际的TS 相对应,TC 与实际的TC 相对应,TP 则与实际的TC 集相对应[2]。本文所提出模型的对应关系如图1 所示。
从图1 当中可以清楚的看出,一个TD 能够被多个TC 复用,一个TC 则能被多个TP 所拥有,一个TP 能包含多个TC。
2.1.2 测试框架
以本文提出的全新测试模型为依托,对相应的框架方案进行设计,该测试框架的总体结构如图2 所示。
图1:测试模型的对应关系示意图
图2:测试框架的总体结构示意图
在整个测试框架当中,脚本执行工具是核心部分,是测试流程的控制枢纽。其中的TC 和TP 为含相关确定参数的JSON 文件,其能够对脚本执行工具进行驱动,从而对具体的测试任务进行执行。在这一过程当中,脚本会按照驱动参数完成加载,并对与之相应的驱动器脚本进行调用,经过测试得到具体结果。当TP 为脚本执行工具所要执行的任务类型时,可以自动生成测试报告,并以通知的方式对测试结果进行发送。
2.1.3 测试流程
依托上文设计的测试框架,并与Web 管理脚本的实际需求进行有机结合,构建测试流程,具体如下:
(1)对项目的实际测试需求进行确定,这是自动化测试流程构建的前提和基础,当需求确定后,便可对驱动器脚本进行设计开发;
(2)当完成驱动器脚本后,可将脚本数据及驱动参数添加到脚本管理系统当中,在具体添加的过程中,系统会按照输入的数据及参数,自动生成脚本;
(3)可在系统中对TD 进行选择,并对驱动参数进行配置,添加TC 数据,在这一过程中,系统会自动生成描述TC 的JSON文件;
(4)以实际的测试类或任务为依据,将多个TC 组织起来,为其配置定时器参数,添加至TP 中,此时系统会自动生成描述TP的JSON 文件;
(5)在脚本管理系统中,可执行TC、TP,并对每日的计划任务进行构建。计划执行的过程中,系统会对脚本执行工具进行调用,按照所得的测试结果生成测试报告,如有必要可以通过邮件的形式,对所得的测试结果进行发送。
本文所提出的测试平台由以下几个部分组成:测试数据、脚本执行工具以及脚本管理系统。其中测试数据包括TD、TC、TP 和最终得到的测试结果(仅存于数据库当中);脚本执行工具的主要作用是执行测试任务;脚本管理系统则是在Web 端提供相关的管理功能,系统以Python 库的方式,对脚本执行工具进行调用,进而对测试任务进行执行,并获得最终的测试结果[5]。
2.2.1 技术架构
本次设计开发的测试平台采用的是当前较为流行的B/S 架构体系,浏览器端与服务器端的数据通信借助Http 接口来实现。其中服务器端包括以下几个层次:
(1)控制层。在测试平台中,控制层主要负责的是后台接口程序的执行,通过解析浏览器端的统一资源定位符(URL),调用业务逻辑处理,并将所得的数据经渲染后返回。
(2)表现层。该层在测试平台中主要负责的是将处理后的数据,经渲染之后返回给浏览器。
(3)逻辑层。该层主要负责业务处理,平台自动执行脚本时,逻辑层能够按照实际需要,对脚本执行工具进行调用,并获得相应的测试结果。同时,该层还能对数据库进行读写操作。
(4)操作层。该层主要负责对测试数据进行读写操作,包括两部分数据,一部分是测试文件,另一部分是常规数据库。
测试平台采用分层架构体系,每个层次均有自己的职责,由此使得设计中的程序代码耦合度大幅度降低。
2.2.2 数据库
测试平台的数据源为MySQL,这是一款关系型数据库管理系统,其突出的特点是数据存取速度快、灵活性高、开放源码、无需维护、安全可靠等,适合本次开发的系统。该数据库采用的引擎是InnoDB,这款引擎不仅具有超高的并发处理能力,而且还有较强的数据恢复能力,数据表通过外键进行约束,数据的可靠性更高,完整性更好。
本次开发的测试平台中,TC 与TP 全部都是由脚本执行工具执行驱动器脚本来完成,由此可见,该工具是整个平台最为重要的组成部分之一,具体包括如下功能:执行TC、TP,根据所得的结果生成报告等。该工具的设计过程如下:
2.3.1 工具安装
在测试平台中,该工具能够被以下两种方式调用,一种是Python 库,另一种是终端命令。前者为在程序中对脚本执行工具进行调用,需要Python 库提供两个接口,其中一个负责执行PC,另一个负责执行TP,并在请求接口后,返回测试结果对象,在该对象当中封装了如下信息:用例集、测试所得的结果、生成的报告以及执行日志等等。因测试平台的开发人员需要在本地环境对脚本执行工具进行调用,所以该工具应当具备终端命令方式执行测试任务的功能,从而给脚本数据的调试与维护提供便利。为简化工具的安装过程,可以借助Setuptools 工具,对Python 的源程序进行打包处理,利用同一个数据包在系统中完成版本的切换。
2.3.2 接口设计
在对脚本执行工具的接口进行设计的过程中,可以结合上文中提出的自动化测试方案,接口包括测试工具主程序、TC 对象、TD对象、测试套件对象、加载器、执行器以及测试通知方法等。
测试平台的脚本管理系统包括以下几个功能模块:TD 管理模块、TC 管理模块、TP 管理模块以及面板模块等。
2.4.1 TD 管理模块
该模块具备如下功能:查看、添加、修改以及删除等,可以功能设计方案为依托,对该模块的表结构进行设计,据此设计接口。该模块的控制层方法类为Driver Controller(DC),逻辑层方法类为Driver Service(DS),操作层方法类为Driver Table(DT)。其中DS 通过对DT 进行调用,来完成数据库的读写操作,而Web.Py内置的application 对象能够对系统的用户交互进行控制,并在解析管理请求的基础上,对DS 进行调用,经模板渲染后返回给用户。
2.4.2 TC 管理模块
该模块分为两个部分,一部分是TC 管理,另一部分是执行结果管理,前者的基本功能包括查看、添加、修改、删除、即时执行以及停止执行;后者的主要功能为查看测试结果,该结果中包含如下信息:运行状态、结果概况、时间以及日志等。
2.4.3 TP 管理模块
该模块与TC 管理模块相类似,也是由两个部分组成,分别为TP 管理和执行结果管理,其中TP 管理比TC 管理多出一个定时执行功能,而执行结果管理主要是以邮件的形式发送通知。
2.4.4 面板模块
该模块能够对整个平台的状况进行显示和管理,具备如下功能:统计、配置以及扫描等。可对测试数据及结果进行统计,由此可以如实反映出测试的覆盖程度,并且能够对测试工具进行配置。
在本次设计中,需要实现的内容包括脚本执行工具以及脚本管理系统,具体的实现过程如下:
2.5.1 脚本执行工具的实现
相对配置文件进行初始化,具体包括TD 及报告模板的存放路径、邮件服务器地址、账号、密码等;当初始化完毕后,应对用户请求进行解析,以此来判断用户是执行TC 还是执行TP,按照解析所得的结构,对加载器进行调用,完成测试目标的加载。如果是Python 库方式的请求,可借助测试工具直接实现,无需进行程序判断,若是调用接口,则为执行TC;由测试加载器按测试目标对TC进行初始,封装成套件后返回,再由执行器根据自动化单元测试框架,依据预先设定好的次序,执行TC。在执行一个TD 下的TC 时,先执行固件构建方法,随后进行遍历,如果出现异常,那么执行失败,无异常则执行成功;当TC执行完成后,执行器会自动生成测试结果,经统计后返回,最终生成测试报告,以邮件的形式进行发送。
2.5.2 脚本管理系统的实现
在测试平台的开发中,脚本管理系统采用的是Web.Py 框架(后台),而前台为混合结构。可以在系统的功能模块中添加TD,先校验TD 名称的唯一性,如果存在,那么无法进行添加,若尚未存在,则可进行添加,此时可在TD 路径下,对脚本文件进行添加,主要包括固件建立/销毁的脚本文件、主程序测试的脚本文件以及JSON 文件等。当需要对TD 进行删除时,可直接点击界面上的删除按键,完成删除。TC 的实现与TD 基本相同在此不进行累述。
综上所述,软件测试是一项较为复杂且系统的工作,为使当前软件测试工程中存在的问题得到有效解决,自动化测试随之成为主流发展趋势。在这一背景下,本文设计开发了一款自动化、通用化的测试平台,该平台能够对测试用例进行自动构建,还能对测试脚本进行自动执行,由此进一步提升了软件测试效率,一些问题也随之迎刃而解。在未来一段时期,应当加大相关方面的研究力度,对测试平台的功能进行逐步完善,从而使其更好地为软件工程服务。