陈征
(中国电子科学研究院,北京石景山,100041)
消息中间件能够提供跨网络、硬件和操作系统的透明的应用服务[2]。它属于整个系统中最重要的软件配置项之一。企业针对各项目开发出了支持在不同操作系统(如Windows、Linux等)上运行的消息中间件。针对该软件,目前的测试流程是:测试人员部署各操作系统上的测试环境,然后手工编写测试脚本在不同版本上编译执行。当前测试流程产生如下问题:①不同操作系统上的软件提供的功能重复性较高,测试人员需手工在不同平台上重复执行相同的测试,进行全面的测试工作需要较长时间和较多的人力资源,在有限的时间里测试工作量大,很难保证软件的质量;②该消息中间件在安装时需要进行复杂的参数配置才能启动,在环境准备上花费了大量时间。
针对该消息中间件的特点,要实现软件测试的自动化,需要一个强大的自动化测试框架作为支撑,而STAF提供了构建复杂分布式测试环境的有效解决方案,在安装了STAF的机器上可以实现以下功能:随时启动、停止测试机上的任一程序,获得测试机的状态,在测试机之间互传文件,提供不同操作语言API接口,适应多种操作系统[3]。结合STAF的外部服务STAX,在STAF的基础上帮助用户灵活操纵框架实现测试用例的分发、执行、部署,使测试任务更方便的分发到相应测试机去完成测试用例的执行、测试结果的收集[4,5]。STAF的开源、跨平台、支持多语言并且基于可重用组件的特性[6],使得构建消息中间件的自动化测试系统可行。
企业开发的消息中间件,主要功能是屏蔽操作系统平台的差异性,提供跨网络、硬件和操作系统的透明的应用服务,根据提供的统一API接口,实现上层应用的通信、参数配置等功能。该消息中间件软件对不同的操作系统提供统一的调用接口,格式如下:
调用接口执行失败时返回结果为0,成功是返回结果为1。如果软件返回的错误码为0,代表无错误;如果为其他值,则代表相应的错误信息。
该消息中间件具有以下几个特点:
(1)产品支持多个版本,对应不同平台均有相应的软件发布版本可供使用,且各软件版本之间功能重复性较高;
(2)产品配置、环境搭建复杂。
针对该消息中间件软件,传统的测试流程如图1所示。首先,测试人员需要将不同平台版本的待测试消息中间件产品以及测试脚本从SVN服务器中下载到相应操作系统平台;第二步,人工部署测试环境,包括软件的安装配置操作以及测试脚本的编译工作;第三步,人工执行测试,包括启动消息中间件软件,运行测试脚本,记录测试结果;第四步,人工收集并分析测试结果,分别在各个平台上使用EXCEL表记录测试执行情况,并将整理结果移植Word文档中完成测试报告的编写。
图1 消息中间件软件目前测试过程
从目前测试现状来看,测试工作仍以手动测试为主,只有少部分执行测试功能是调用自动化测试脚本执行。测试前期测试版本的获取、人工搭建基于不同操作系统平台的测试环境、安装配置不同平台上相应产品以及针对不同系统版本的测试脚本进行编译都需要人工参与,耗费了测试人员大量的时间;另外,不同版本消息中间件提供的功能重复性较高,测试人员需要在不同操作系统平台上执行相同的测试,工作量很大。尤其是在项目进度紧张的情况下,会耗费大量的人力资源。
分析上述现状的原因,是因为对现有的测试过程中的测试资源,包括待测产品、测试脚本以及测试环境资源缺乏规范性和组织性。测试过程以人工操作为主,并没有合适的框架支撑整个测试过程,将一些重复性高的测试任务自动化。分析目前测试活动的整个过程,仍有可改进的部分。
以企业自研的消息中间件为测试对象,利用STAF/STAX技术,设计一个自动化测试系统MOMSTAF(Message—oriented Middleware Software Testing Automation Framework,以下简称MOMSTAF),该系统实现消息中间件软件的测试过程自动化进行,包括制定并部署待测消息中间件软件测试任务、自动执行消息中间件软件测试用例、自动监控软件测试过程以及自动收集并统计软件测试执行结果的功能。
该系统主要考虑以下几个方面:
(1)消息中间件软件测试全过程的自动执行
本系统将充分考虑测试人员在执行企业自研消息中间件软件测试过程中的各个环节,将日常测试工作分为以下五个基本流程:
(a)测试计划阶段:完成自研消息中间件软件测试任务的制定,确定测试范围,包括选择要测试的消息中间件版本、确定待测版本的操作系统类型、选择要执行的消息中间件测试项;
(b)测试准备阶段:根据测试计划阶段确定的测试范围,完成消息中间件测试任务的部署,包括选择匹配的测试主机、启动测试主机、下载待测消息中间件及测试脚本到测试主机、部署待测软件、编译测试脚本;
(c)测试执行阶段:在测试准备阶段完成之后,在各测试主机上执行测试脚本。在测试用例执行过程中,提供人机界面方便测试人员实时监控各测试主机的执行情况,方便测试人员掌握测试执行进度;
(d)测试结果统计阶段:收集各个测试主机的测试执行结果,给出整个测试结果的统计信息(统计出通过与失败的测试用例,以及失败的原因);
(e)测试环境清理阶段:在测试用例执行完毕并对测试结果做出统计后,完成测试环境的清理,恢复测试环境的初始态。
(2)测试任务部署在虚拟机中执行,节约测试资源,简化测试环境搭建
由于企业自研的消息中间件适用于多操作系统平台(如:Windows、Linux平台),为了达到在硬件资源紧张的情况下,有效节约测试资源,满足自研消息中间件产品在不同操作系统上执行测试的要求。因此在MOMSTAF自动化测试系统的设计过程中,需要将消息中间件软件测试任务部署到虚拟机中执行,通过在虚拟机上执行测试任务,解决测试人员在测试消息中间件时测试资源不足的问题。另外,将待测消息中间件需要考虑跨平台通信的各种测试场景,如点对点通信以及多对一的通信场景,通过使用虚拟机有效的简化了测试环境的搭建。
根据以上对MOMSTAF自动化测试系统的业务需求分析结果,提出适用于当前被测软件自动化测试系统的架构设计方案,该系统总体架构设计划分为三层,从上至下依次为表示层、业务逻辑层、数据层,这种架构明确了责任的划分,使系统更加易于维护和扩展。 MOMSTAF系统体系架构图如图2所示。
表示层位于最上层,该层向测试人员提供友好的人机交互界面,主要为测试人员提供测试的操作界面,接收测试人员输入的操作,监控自动化测试执行的进度,方便测试人员使用MOMSTAF自动化测试系统执行自研消息中间件的测试工作。
图2 自动化测试系统架构图
业务逻辑层位于表示层和数据层之间,包括测试任务管理模块、监听管理模块、测试用例管理模块、结果统计模块、虚拟机管理模块和日志管理模块。这些模块实现了MOMSTAF自动化测试系统的整个自动化测试过程。在执行自动化测试的过程中,STAF自动化测试框架提供测试服务,并由其外部执行引擎STAX统一调度整个自动化测试过程。
图3 自动化测试系统功能模块图
数据层主要用来存放自研消息中间件的测试任务、测试结果以及自动化测试系统运行时的日志等信息。
经分析,初步将MOMSTAF自动化测试系统分为测试任务管理模块、监听管理模块、测试用例管理模块、结果统计模块、虚拟机管理模块、日志管理模块六个部分,这些模块整合了自动化测试的整个过程:制定测试任务、检查测试任务、分发测试任务、部署测试任务、执行测试任务、监听测试过程、收集并总结测试结果等。具体的功能模块划分如图3所示。
测试任务管理模块主要实现在自研消息中间件软件自动化测试过程中对测试任务的管理。包括以下几部分:第一,测试任务制定,确定要执行的测试任务,包括选择被测软件版本、确定待测版本的操作系统类型、选择要执行的测试用例。第二,测试任务分发,该功能实现将制定好并完成检查的测试任务分发到相应测试主机(测试任务的检查由监听管理模块中的任务状态监听实现,检查过程见图5),等待部署测试任务。第三,测试任务部署,主要实现在收到测试调度机的测试部署的命令后,分别从产品服务器和测试服务器中下载相应待测消息中间件以及测试脚本,并完成软件的安装以及测试脚本的编译。第四,测试任务执行,接收测试调度机的测试执行命令后,开始进行自动化测试,在测试执行过程中,向测试主机反馈测试进度情况。测试任务管理的时序图如图4所示。
图4 测试任务管理时序图
监听管理模块主要实现MOMSTAF自动化测试系统在执行自研消息中间件的整个自动化测试过程中的监听管理。实现的功能包括:第一,启动监听,开启监听管理。第二,关闭监听,结束自动化测试任务后,关闭监听管理。第三,任务状态监听,主要实现对测试任务中的待测版本以及相应虚拟机的状态监听,监听待测版本在代码服务器中是否存在、虚拟机的状态是否为未被占用的状态,任务状态监听活动图如图5所示。第四,测试进度监听,主要实现在测试的过程中,实时监听各个测试主机的测试执行进度。第五,异常处理监听,提供异常处理监听机制,监听并定位系统错误位置信息。
图5 任务状态监听活动图
图6 测试结果判定流程图
测试用例管理模块主要实现对自研消息中间件软件测试用例的管理,包括对消息中间件软件测试用例的增加、删除、修改、查询操作,同时为了保证测试服务器中的测试脚本与测试用例的一致性,还应实现测试用例的同步功能,即MOMSTAF自动化测试系统后台定期对测试用例与测试脚本进行同步更新。
测试结果的统计模块,实现的功能包括:测试结果统计、测试结果分析、测试报告生成。测试结果统计功能主要用于在执行被测软件测试结束时,收集并统计各测试主机的最终执行情况,统计通过与不通过的测试用例。测试结果分析用于对统计出的测试结果进行分析,分析的内容包括:各版本消息中间件软件测试用例的执行通过率与不通过率以及各测试项执行情况柱状图。测试报告生成,根据测试结果的统计与分析,生成测试报告,同时实现将测试报告导出以及上传至服务器的功能,方便项目相关人员传阅以及用于项目数据积累。
测试结果统计模块中判断测试用例通过与否的流程图如图6所示。首先,测试脚本执行消息中间件API接口函数,测试脚本执行该函数后,返回接口函数执行结果以及错误码。然后,将接口函数返回值、错误码和测试脚本调用该接口函数时传入的不同参数写入实际结果执行文件,写入顺序与预期结果文件一致,预期结果文件中的内容以“接口函数名、输入参数、接口函数返回值、错误码”排序,该文件放在当前测试脚本目录中。最后,将实际结果执行文件与预期结果文件进行对比,如果内容一致,则判断该测试用例通过,否则,判断为不通过。
虚拟机管理模块主要实现对测试环境中虚拟机的管理,主要实现对各虚拟机的检查、启动、初始化操作。其中,VM虚拟机检查功能实现在接收到监听管理模块中的任务状态监听消息后,对VM虚拟机当前的状态是否被占用进行检查。如果未被占用则启动虚拟机,否则向测试调度机返回当前被占用的信息。VM虚拟机初始化功能主要实现在消息中间件软件测试任务执行完毕后,执行环境的清理,恢复环境初始化状态,完成初始化操作后关闭虚拟机。
图7 自动化测试系统网络拓扑图
日志管理模块主要完成对消息中间件软件自动化测试系统运行时的日志信息进行记录。
MOMSTAF自动化测试系统网络结构主要由测试调度机、测试机群以及文件服务器组成。测试调度机主要完成自研消息中间件软件自动化测试流程的控制与管理。测试机群由不同操作系统平台的测试主机组成(这里的测试主机为虚拟机),主要用来执行具体的自动化测试工作。文件服务器由代码服务器Build Sever和测试服务器Test Sever组成,分别用来存放不同版本的消息中间件软件和测试脚本。该系统网络结构初步设计如图7所示。
通过使用该自动化测试系统,使用机器代替人来完成复杂、重复的劳动,有效的降低测试人员在测试企业自研的消息中间件时手工配置环境的复杂度,同时解决在多平台下测试消息中间件软件时任务繁重、测试内容重复率高的问题,不仅降低测试人员的工作量,还提高了测试人员的工作效率,使测试人员集中精力进行消息中间件软件其他功能点的探索性测试,保证产品的质量。