APP下载

面向服务的辅助集成测试系统设计与实现

2014-10-21徐亮亮宋剑锋田飞

计算机光盘软件与应用 2014年24期
关键词:测试用例

徐亮亮 宋剑锋 田飞

摘要:为了削弱面向服务的应用系统中业务流程对服务模块的强依赖关系,降低系统集成测试阶段问题服务对集成过程的影响,提出了基于模拟服务的辅助集成测试方法,设计了面向服务的辅助集成测试系统模型,以缓解面向服务的体系结构下系统集成测试阶段面临的巨大压力。根据辅助集成测试系统模型中阐述的模拟服务生命周期以及构建模拟服务的关键过程,实现了系统原型研制并构建了SOAP类型模拟服务,验证了辅助集成测试方法有效性。

关键词:集成测试;模拟服务;SOAP服务;测试用例;服务生成

中图分类号:TP311.52

在面向服务的体系结构[1](Service-oriented architecture,SOA)下,通过对业务单元进行服务封装,提高了系统中模块的复用率,也解耦了模块间的相互关系。虽然应用系统被拆分并封装成服务,但是系统业务流程依然对服务模块具有强依赖关系,随着服务的增多,导致服务集成过程变得缓慢而脆弱。首先,服务间通过网络进行通信,不但提高了集成测试环境的构建成本,而且增加了模块间的调试难度;其次,采用多团队或引入第三方单位的合作研制方式,加重了集成测试阶段的协调工作,通常会由于某个服务自身存在问题、研制团队失误或第三方研制单位的缺席而导致集成测试节点的延期,最终扰乱整个应用系统的研发过程,为集成测试带来巨大的压力[2]。

目前,面向服务系统的集成测试较多地侧重于单个服务的接口测试方面[3],以保证服务接口功能的正确性,从而降低服务相互间集成时出现问题的概率,但无法从根本上解决集成测试过程中存在的问题。针对这一状况,本文从辅助服务间交互测试的角度出发,利用模拟服务配合被集成服务完成集成过程,有效地缓解了集成测试阶段的压力。

1 面向服务的系统集成测试定义

系统集成测试[4],也叫组装测试或联合测试,即将程序模块采用一次性或增殖方式组装起来,对模块间的接口进行正确性检验的测试工作。面向服务系统的集成测试是在面向服务的体系架构下,对应用系统中的服务模块进行组装,以验证各服务间接口的功能正确性,确保应用系统中各服务间的互联互通互操作。

面向服务的系统集成测试将单个服务模块集成到应用系统中进行测试,可以是一次性的集成(非增量式集成),也可以是逐个的扩展集成(增量式集成),直到完成整个应用系统测试。服务的集成测试要求被集成的服务按照设计要求通过单元测试,保证单个服务的高质量要求,但经过单元测试的服务不足以保证整个系统的质量,有许多隐蔽的失效是高质量模块间发生非预期交互而产生的,所以服务集成测试的必要性在于保证能够单独工作的服务连接起来也能正常工作。此外,在某些开发模式中,如迭代式开发,服务的设计和实现是迭代进行的,在这种情况下,服務服务集成测试的意义还在于它能间接地验证概要设计是否具有可行性。

2 模拟服务辅助集成测试原理

模拟服务是一种服务真实存在的服务提供者,模拟服务存在一个或多个被模拟的目标服务,模拟服务对外提供与目标服务相同的服务接口,两者对于同一服务调用请求(接口调用参数相同)返回一致的响应结果。与真实服务不同的是,模拟服务不关心目标服务的业务逻辑,仅仅采用请求参数匹配的方法来得到应该返回的结果数据,这样模拟服务即可替代目标服务及目标服务依赖的所有服务,屏蔽了目标服务的实现细节。如图1所示,某示例应用系统中A服务依赖B和C服务,B服务又依赖于D和E服务。

通常在服务的集成测试过程中,若需对A服务进行测试,那么必须首先构建出A服务的整颗依赖树,即B、C、D和E服务的实例。采用模拟服务辅助集成测试方法,在A服务需要进行集成测试时,只需如图中构建模拟B服务替代B、D、E服务实例以及用模拟C服务替代C服务实例,如此测试环境中的实例数量缩减为A服务、模拟B服务以及模拟C服务三个。模拟服务的应用可以辅助和简化系统集成测试的整个过程,具体会体现在如下四个方面:

(1)简化集成测试环境,方便被集成测试服务组件依赖服务环境的部署与搭建;

(2)方便集成测试过程中问题的排查与定位,快速地应对突发情况;

(3)降低服务集成测试过程对关键服务的依赖程度,避免如第三方接口、在线集成组件等对测试过程的影响,提高测试的效率;

(4)缩短软件系统开发的生命周期[5]。

3 面向服务的辅助集成测试系统设计

3.1 辅助集成测试系统模型

辅助集成测试系统,用于生成、发布以及管理用于集成测试的模拟服务,本着自动化构建模拟服务的设计原则,为用户提供简易的操作方法,以应对系统集成测试过程中的频发状况。辅助集成测试系统独立于被集成测试服务,其存在的目的是为被集成测试服务提供依赖的服务环境,如图2所示,为辅助集成测试系统的模型设计图。

辅助集成测试系统负责管理模拟服务的整个生命周期,模型中主要阐述了测试数据准备、模拟服务生成以及模拟服务运行三个阶段的设计工作,测试数据准备阶段明确了集成测试前应准备的模拟服务接口用例样本和样本任务编排数据,模拟服务生成阶段指明了测试过程中模拟服务的构建流程,模拟服务运行阶段设计了模拟服务提供服务的关键过程。

3.2 测试数据准备

系统集成测试前,通常存在一定的准备时间,用于进行测试环境的准备工作。模型中的测试数据准备阶段设定在系统集成测试前,为集成测试过程准备必要的辅助集成测试数据,这些准备数据的目的是使得集成测试过程快速而有效,保障集成测试过程的可靠性,做到有条不紊地应对突发状况。

辅助集成测试系统主要包含两个方面数据的准备工作,一方面是准备被模拟服务的测试用例数据(图2中的服务接口用例样本),另一方面是准备模拟服务接口用例的任务编排数据。通常情况下,服务接口在执行请求操作时会按照参数处理、执行业务和返回响应数据三个步骤进行,如图3所示,在辅助集成测试系统中需对应准备请求样本数据、任务数据和响应样本数据。请求样本数据和响应样本数据为接口的测试用例数据,并以成对的方式出现,数据的来源可以是测试用例文档的提取数据、用户人员的录入数据以及自动生成工具的生成数据[6]。任务编排数据用于描述模拟服务接口在特定的请求样本数据下需要执行的一系列任务信息,如第三方服务调用、计时返回等,任务编排数据可以模拟目标服务的功能特性,这一过程需要通过特定的任务编排工具进行操作。

3.3 模拟服务生成

在模拟服务的生成阶段中,辅助集成测试系统需要为测试人员提供能够简单而快速地构建模拟服务的服务生成工具,负责根据测试数据准备阶段的准备数据创构建模拟服务。

服务生成工具从被模拟服务接口的用例样本出发,筛选出测试结果表现正常(能够反应被模拟服务正常情况下应具有的请求、响应数据特性)的用例数据作为模拟对象,并且从这些对象中提取模拟服务接口的元信息用于服务的构建依据。通常,由于一个服务接口往往存在多个用例样本,所以提取出的接口元信息需要通过归并操作来简化模拟服务接口的数量,这一过程会提高模拟服务的质量及执行效率。

辅助集成测试系统提供服务构建器用于根据提取出的接口元信息生成模拟服务的接口定义,再将接口的用例样本匹配逻辑以及任务执行逻辑注入至服务接口的实现中,即可完成对模拟服务接口的实现。最后,生成的模拟服务接口及其实现将经过编译与装载过程,等待模拟服务进入发布阶段。

3.4 模拟服务运行

模拟服务经过生成阶段被装载至内存中,而在模拟服务发布阶段,测试人员只需指定服务的发布地址以及绑定端口等部署信息,即可准备进行模拟服务的发布。由于辅助集成测试系统模型中设计集成了用于发布模拟服务的嵌入式服务容器,所以模拟服务可以快速地被部署和发布,嵌入式的服务容器也更加方便了对模拟服务的管理工作。

已发布的模拟服务由于没有真实的业务实现,当存在服务调用时,模拟服务执行注入的样本匹配逻辑完成响应数据的查询工作,同时在匹配目的用例样本后,根据植入的任务执行逻辑完成与用例样本关联的编排任务,最后将匹配的结果反馈至服务调用处。模拟服务的运行时序图如图4所示。

4 模型应用与原型系统实现

面向服务的体系结构下,基于HTTP协议的Web服务作为面向服务的一种实现方式,已广泛应用于企业的系统开发过程,而Web服务中当以SOAP(简单对象访问协议)服务技术历史最为悠久[7]。如图5所示,为辅助集成测试系统模型的原型系统部署图,下面将阐述系统中基于HTTP协议的SOAP模拟服务的自动构建和发布过程,介绍原型系统的实现细节。

4.1 模拟服务接口提取

SOAP服务以XML的形式封装服务请求消息[8],如图6展示了用于用户添加请求的SOAP消息信封,通过协议绑定技术该消息将被映射为调用服务实现POJO(简单Java对象)的addUser接口。

辅助集成测试系统采用图中加黑片段XML数据作为服务接口的一个请求样本数据,构建名为addUser的POJO方法,其输入参数为User对象,对象包含name、age和married三个属性。理想状态下,User对象三个属性的类型分别为String、int和boolean,但是辅助集成测试系统识别三个属性均为String类型,得到一个拥有三个String类型属性的User对象,因为基于Document/literal实现的SOAP服务消息中并不携带数据的类型信息[9],所以它不影响对象的数据绑定,如此简化了模拟服务的构建过程。同样,采用上述方法可以从响应样本数据中提取方法返回值类型,完成模拟服务接口元信息的提取过程。

4.2 模拟服务构建

模拟服务在接收到请求消息后,通过数据绑定技术将请求消息绑定至服务实现POJO的方法参数上,完成目标接口的匹配,这一过程采用CXF框架(Apache CXF服务框架)自动完成[10]。

模拟服务通过调用样本匹配引擎和任務查询引擎进行关联数据查询,二者采用独立运行的Web服务方式供模拟服务调用,下面为模拟服务的添加用户接口实现代码:

其中,Finder类封装了样本匹配引擎和任务查询引擎的查询接口,并提供了简单的调用接口findSample和findTasks,方便在创建模拟服务时植入统一的调用代码。在运行过程中,根据Java的反射机制finder实例可以明确当前服务的位置,再由接口的参数匹配确定具体的样本用例,用例样本匹配过程涉及Java基本类型和自定义对象类型的深度匹配,可以借助于规则引擎[11],本文采用的是将参数对象顺序进行序列化后比较的方法[12]。最后,模拟服务顺序遍历查询出的样本编排任务信息,并依次执行任务,完成后将查询出的响应消息返回。

4.3 服务发布与管理

通过动态生成和编译后的模拟服务实体被载入至内存,测试人员在设定模拟服务的部署位置、发布端口等信息后,模拟服务交由CXF以反射的方式进行发布,即可为外部请求者提供服务。模拟服务运行时依赖的样本匹配引擎与任务查询引擎通过独立的Web服务方式运行,为集成测试过程中的模拟服务提供查询服务。最后,模拟服务的管理包含两个方面,一方面是模拟服务启停状态的控制,通过调用CXF的服务控制接口可以很好的完成这方面工作;另一方面是样本数据和任务数据的管理,由于两个查询引擎采用独立的服务方式运行,所以提供简易的数据管理工具即可。

4.4 实际应用效果

经实践证明,模拟服务在系统集成测试阶段能够有效地应对关键服务模块出现问题的情况,使得集成测试过程持续且快速。模拟服务屏蔽了应用系统下复杂的测试环境,同样为无法进行在线集成的线上接口提供了便利的解决方案。如图7所示,为辅助集成测试系统的主界面图。

5 结束语

本文从构建模拟服务的独特角度出发,提出了面向服务的辅助集成测试系统模型,通过模拟服务从容地应对了集成测试环境中服务数量多、服务环境复杂而带来的一系列问题,使得服务集成过程快速而可靠,有效地缓解了集成测试阶段的压力。文中总结了模拟服务创建及发布的整个生命周期,明确了模型中各模块的对于构建模拟服务至关重要的作用,然而尚未提及如接口归并、样本匹配等关键模块的高效实现方法,当样本数据量异常庞大时,这些模块将严重影响模拟服务的性能,为了能够提供高效并且可靠的模拟服务,这一方面仍需加以关注。

参考文献:

[1]凌晓东.综述[J].计算机应用与软件,2007(10):122-124.

[2]杨利利,李必信.Web服务测试问题综述[J].计算机科学,2008(09):258-265.

[3]冯细光,刘建勋.Web服务测试技术综述[J].微计算机应用,2010(01):111-126.

[4]兰景英.软件集成测试技术研究[J].信息技术,2006(08):102-105.

[5]Bobby Woolf.Streamline SOA Development using Service Mocks[J].IBM developerWorks,2005.

[6]马春燕,朱怡安,陆伟.Web服务自动化测试技术[J].计算机科学,2012(01):162-169.

[7]沙为超.基于Web服务的SOA应用研究[J].安徽大学,2007.

[8]张仙伟,张璟.Web服务的核心技术之一——SOAP协议[J].电子科技,2010(03):93-96.

[9]李海峰,杨小虎.基于风格与风格消息的服务性能比较[J].计算机应用与软件,2007(01):80-117.

[10]彭邦伦.利用JAX—WS开发Web Service[J].电脑编程技巧与维护,2008(12):21-23.

[11]刘伟.Java规则引擎——Drools的介绍及应用[J].微计算机应用,2005(06):79-83.

[12]晏立,沈銳.Java序列化技术的探讨[J].红河学院学报,2011(04):37-39.

[13]张羽丰.面向服务的Web服务测试框架研究与实现[J].国防科学技术大学,2008.

[14]罗作民,朱燕,程明.Web服务测试工具SOAPUI及其分析[J].计算机应用与软件,2010(05):155-157.

[15]秦锋,李乔,郑啸.Web服务测试的一种实现[J].计算机技术与发展,2007(08):239-242.

[16]严思静,常红春,刘钢,唐奋飞,冯国军.Web服务测试工具的设计[J].硅谷,2010(08):60-64.

作者简介:徐亮亮,男,研究生在读,研究方向:军用软件集成;宋剑锋,男,博士;田飞,男,研究生,研究方向:军用软件集成。

作者单位:华北计算技术研究所 军用中间件研发中心,北京 100083;中国电子设备系统工程公司研究所,北京 100141

猜你喜欢

测试用例
基于SmartUnit的安全通信系统单元测试用例自动生成
浅析基于因果图法软件测试用例的设计
基于MBD模型自动生成测试用例的软件测试方法
基于混合遗传算法的回归测试用例集最小化研究
基于需求模型的航天软件测试用例生成方法
基于依赖结构的测试用例优先级技术
电动汽车整车控制软件测试用例设计方法及应用
软件测试用例执行优化研究
浅析软件测试用例管理
软件回归测试用例选取方法研究