面向需求覆盖的Web服务自动化测试框架*
2017-11-16方建勇
李 吟,方建勇,江 梦
1.江苏自动化研究所,江苏 连云港 222061
2.连云港职业技术学院,江苏 连云港 222061
面向需求覆盖的Web服务自动化测试框架*
李 吟1+,方建勇1,江 梦2
1.江苏自动化研究所,江苏 连云港 222061
2.连云港职业技术学院,江苏 连云港 222061
Web服务作为W3C认证的面向服务架构(service-oriented architecture,SOA)的实现方式,对外提供可用于黑盒测试的接口文档,如何有效地自动化生成测试用例成为Web服务自动化测试的首要问题。现有的测试工具对WSDL(Web services description language)的文档结构和数据之间的依赖关系考虑不足,且缺乏有效的测试数据生成方法,进而导致测试效率不高以及生成的测试用例无法覆盖全部的测试需求。为此,提出了Web服务自动化测试的技术框架,并实现了支持此框架的原型工具。该框架基于WSDL文档解析获取覆盖结构特征的SOAP(simple object access protocol)骨架集合,并采用可变力度组合测试模型生成满足元素组合的SOAP封装消息,之后通过有限状态机/接口契约模型获取操作序列测试路径,保证了操作序列测试数据的有效性。案例结果表明了所提框架生成的测试数据能够更好地满足测试需求,达到理想的测试覆盖率,并能够检测出更多的错误,且在用例规模上优于现有的方法。
Web服务;面向服务架构;自动化测试技术框架;可变力度组合测试;有限状态机;接口契约模型
1 引言
Web服务技术的兴起为面向服务架构(serviceoriented architecture,SOA)的应用提供了新的计算模型,实现了分布式应用的互用性和适应性,能够满足信息的高度共享和灵活重组[1-3],是网络中心站以及“十二五”、“十三五”信息化建设的核心支撑,是取得“制信息权”的重要保障。当前,空军、海军新一代在建/在研的指挥中心信息系统正全面转向面向服务技术架构。随着这种技术的广泛应用,如何严格地保证Web服务的可靠性和安全性成为一项迫切且艰巨的任务[4-5]。与传统软件测试相比,Web服务的数量庞大且存在大量的组合需求,很难逐一进行手动测试,且容易产生人为错误[6]。同时,Web服务技术规范复杂,服务的源代码不可得,不具备可视化图形界面等特殊性增加了人工测试的难度,亟需提供测试的自动化[7-8]。
在单个Web服务中聚合了一组函数,其调用语法定义在相关联的依据XML(extensible markup language)标准规范描述的WSDL(Web services description language)文档中[9-10],描述了服务操作信息和相应的输入/输出参数,用户能够根据需求进行服务调用,同时可以作为引用文档,展开基于服务接口的黑盒测试[11-12]。目前,存在一些基于WSDL描述文档的Web服务测试工具,例如SoapUI[13]、SOATest[14]、Push-ToTest[15]和TAXI[16]等,可是测试用例的设计、产生和撰写仍需要测试人员的大量人工参与,并且缺少对服务中存在的数据组合、约束关系及操作序列的深入研究,产生的用例冗余度较高,错误检测能力较差,导致测试效率及测试质量并没有得到有效提高。
本文以Web服务软件测试用例的自动生成技术为背景,基于WSDL,对用户的不同需求场景进行覆盖,结合传统软件测试技术和方法进行分析研究和扩展,提出了基于可变力度组合测试模型以及接口契约模型的测试用例生成器系统化框架,运用需求驱动的输入生成策略,生成Web服务最优测试用例集,达到覆盖测试需求,并开发相应的自动化测试工具,建立用例生成及管理、用例运行、结果分析的支撑环境,为Web服务自动化测试提供了有力手段,具有十分重要的理论意义和实用价值。
2 研究目的
本章通过两个实例展示现有的软件存在的问题以及本文提出的测试用例生成器框架的优势,对提高测试的自动化程度和基于组合模型及接口契约关系的测试用例集优化进行说明。
图1是一个简单的虚拟测试示例服务的WSDL规范,描述了两个指定的操作,分别为operation1和operation2。其中,operation1的输入参数分为如下三部分:
(1)firstInput∶属于 XSD(XML schemas definition)定义的复杂数据类型,包含5个子元素,它与子元素之间存在Choice(选择顺序)的完整性约束关系,且子元素中包含一个约束关系为All(任意顺序)的嵌套复杂数据类型子元素AllElem,如图1所示。
Fig.1 Element analysis for WSDL document图1WSDL案例元素解析
(2)secondInput∶属于XSD定义的一种简单数据类型(string)。
(3)headerPart∶另一个属于XSD定义的一种简单数据类型(string),用于SOAP(simple object access protocol)消息的头部。
另一个操作operation2的输入参数为一个复杂数据类型元素,它与子元素之间存在Sequence(特定顺序)的完整性约束关系。同时,图1的WSDL规范还分别定义了这两个操作的响应消息op1Response和op2Response。
当使用现有的Web服务测试工具(以SoapUI为例)执行上述WSDL文档时,将会为每个操作生成独立的SOAP封装消息,其中包含了测试的框架及输入数据格式信息,如图2所示。在该用例框架中,自动生成了SOAP消息的格式标签和输入数据部分的提示注释信息(如10、14、17行),并以“?”标签的形式预留了输入数据空间(如5、11~13、15、18~19行)。虽然生成的框架信息能够指导测试人员操作这些数据元素,手动构建需要的测试用例,但没有对复杂数据类型的Sequence、Choice、All元素进行处理,以及无法自动生成需要的等价类及边界值测试数据,仍需要测试人员承担大量复杂的人工干预。
Fig.2 Test cases skeleton based on SoapUI图2 SoapUI生成测试框架
第二个实例同样以图1所示的WSDL规范为例,随机生成相应的数据进行实例推导。在上述SOAP消息框架中填补随机的数字类型和字符串类型数据,使得测试用例能够有效使用。考虑到输入数据的组合空间问题,创建输入消息依赖于各部分实例的笛卡尔积之和,但是以此产生的数据组合会发生爆炸,存在大量重复的实例数据。同时,Web服务通常含有多个操作的情形,存在操作之间的信息交互,仅仅对单个操作进行测试是不充分的,而现有的操作序列生成方法并没有考虑各操作之间的输入/输出依赖关系以及测试路径中操作的输出数据需要保证序列中后续操作的输入合理性。
针对上述问题,本文提出的测试框架中重点研究现有工具的后续数据生成部分工作,通过将WSDL规范的XSD结构自动实例化,并以传统软件测试方法中的等价类划分及边界值等策略,自动化生成Web服务的测试用例,提出处理图1的例子的解决方案,主要贡献如下:
(1)复杂数据类型。系统选择可能的子元素代替输入参数中存在的复杂类型数据结构,如All、Choice、Sequence,自动选取Choice中的每个子元素,随机顺序ALL中子元素及特定顺序Sequence保持生成的数据结构的充分性。
(2)数据属性元素。对于occurElem元素,当指示符指定元素最大/最小出现次数分别为3和1时,系统选取3类结果,取最大值,取最小值和中间值(在非受限情况下,在实例生成前设置为最大值)。
(3)字符串数据。通过生成标准输入数据处理字符串类型,填补SoapUI测试骨架相应标签。
(4)数据约束。建立简单、复杂数据的约束模型,准确表达数据之间的约束关系。
(5)单个操作数据。基于可变力度组合测试的方法,采用等价类划分、边界值分析方法合理生成元素之间的正常、边界、异常值的组合数据,覆盖子元素之间的组合关系。
(6)操作序列数据。基于有限状态机模型生成操作之间存在的合理路径,并依据操作之间的接口契约模型生成满足操作数据依赖关系的操作序列测试数据。
上述优化措施覆盖了数据类型的解析及测试数据的生成,具体流程如图3所示。
Fig.3 Workflow for test cases generator图3 测试用例生成器流程
本文工具能够为Web服务生成满足数据结构多样性及数据元素有效组合的测试数据,通过SOAP消息结构封装相应的测试用例实例,发送请求、接受响应、分析结果以完成测试流程。最终,基于图1,生成7个结构不同的SOAP消息,部分如图4所示,之后填充不同的输入值,产生满足组合的测试用例集。
Fig.4 Test cases generated by the proposed tool图4 测试用例生成器流程
3 测试用例自动生成框架
依据案例研究获取的Web服务测试需求以及现有测试工具存在的不足,本文提出了Web服务自动化测试框架,如图5所示,测试流程依次包括WSDL文档元素解析、单个操作测试数据生成、操作序列测试路径生成和测试用例执行。以WSDL为输入文件,输出符合XSD规范的消息用例集,以SOAP消息执行测试用例并收集服务响应结果。
Fig.5 Web service automation test framework图5 Web服务自动化测试框架
3.1 WSDL文档元素解析
依据上述技术框架,测试流程从输入的WSDL文档模式分析开始,WSDL文档是一个满足W3C系统规范的XML文档,对外进行服务描述。Tsai等人扩展了标准的WSDL文档,加入了约束信息和语义信息用来增强其描述能力,辅助测试用例生成[17-18]。扩展后的WSDL文档包括内置数据类型、简单数据类型和复杂数据类型。简单数据类型由元素<xs:simpleType>定义,它与内置数据类型之间存在表达性约束关系(representation constrains),复杂数据由元素<xs:complexType>定义,复杂数据与子元素之间存在完整性约束关系(integrity constrains),同时多个子元素之间存在3种指示符关系,包括Sequence(特定顺序)、Choice(选择顺序)、All(任意顺序)3种指示符。基于WSDL文档解析,可以得到对应的SOAP封装消息,目前已有的Web服务用例生成器均以此填充数据产生测试用例集合。然而,依据第2章案例所示,该类生成器只能为每个操作生成唯一的SOAP信息架构,而不能覆盖操作中的复杂数据类型及数据属性模式,无法满足测试用例设计的充分性需求。
为了完整地描述单个操作中的各类数据元素及元素之间的约束关系,本文基于文献[19],构建如图6所示的形式化树模型(定义1),通过约束模型[20]完整地描述单个操作中各类数据元素及元素之间的约束关系(定义2);并在文献[21-22]基础上,构建如图7所示的操作树模型(定义3),将操作之间部分关系形式化为一个逻辑上的树状结构,以展示Web服务中操作之间的输入/输出依赖关系。
定义1(形式化树模型)一个操作的数据元素可以表示成一个形式化树模型的集合T(N,S,B,nr,IC,RC,EE,ED)。其中,N为复杂数据类型中所有子元素名的集合;S为简单数据类型元素名的集合;B为内置数据类型元素名的集合;nr为复杂数据根节点的集合;IC为复杂数据根节点和复杂数据以及复杂数据其子元素之间的刻面约束,即WSDL中定义的完整性约束(基数约束);RC为简单数据和内置数据之间的刻面约束,即WSDL中定义的表达性约束(值域约束);EE为边的集合,∀e∈EE,表示为e(p,x,c),p∈N⋃nr,c∈N,x∈IC⋃{∅};ED为边的集合,∀e∈ED,表示为e(p,x,c),p∈N⋃S,c∈B,x∈RC⋃{∅}。
定义2(数据约束模型)
其中,Cardinality和ValueRange定义了数据自身属性的约束关系,Cardinality基数约束,是指被约束对象的取值数量的限制,包括最大、最小和固定的基数约束,对应WSDL文件中的minOccurs和maxOccurs属性;ValueRange值域约束,是指被约束对象的取值范围的限制,对应WSDL中的Restriction约束的定义;Rule规则约束,是指被约束对象的属性之间的比较复杂的约束关系,用于定义多个数据之间或属性之间的约束。该约束关系根据范围又可以细化为两种:同一数据不同属性之间的约束关系innerRules规则,不同数据的属性之间的约束关系Rules规则。上述约束关系通过规则语言SWRL(semantic Web rule lan-guage)表示[23]。
Fig.6 Formal tree model图6 形式化树模型
Fig.7 Operation tree model图7 操作树模型
定义3(Web服务操作树模型)一个WSDL文档中的操作元素O=(Input(O),Output(O))。其中,
为了采集单个操作中的所有结构特征,算法1遍历形式化树模型中的DOM节点,如果该节点为复杂数据节点,则根据其子元素间的指示符关系,分批生成覆盖结构特点的SOAP骨架信息集合。对于存在基数约束的节点,先获取该节点的约束关系(minOccurs和maxOccurs属性),然后根据设定值进行枚举。算法1在达到操作覆盖、消息覆盖、模式覆盖后停止执行。
算法1 SOAP骨架信息集生成算法
3.2 单个操作测试数据生成
基于图5提出的Web服务测试架构,为了生成SOAP骨架中的预留数据,需要考虑简单数据类型值域约束、复杂数据类型子元素组合关系和数据规则约束3种情况,生成单个操作数据的流程如下。
步骤1读取约束模型Constrains中的值域约束,这些约束规定了字符串候选的枚举值、字符串模式、数值类型的上下边界等信息。
步骤2根据单个操作的输入数据和步骤1中获得的数据值域约束,将输入域进行等价类划分,采用边界值和随机策略生成满足条件的有效数据和无效数据。
步骤3根据复杂数据类型的子元素存在的inner-Rules规则和可变力度组合测试模型,生成覆盖数据子元素正常、空值、边界、异常组合力度的复杂数据组合测试数据,并考虑复杂数据类型的嵌套关系。
步骤4根据不同数据的属性之间的约束关系Rules规则,分别生成满足约束和不满足约束的有效数据和无效数据。
步骤5按照上述步骤分别为SOAP骨架集中的每个SOAP消息填入覆盖各类需求的数据,生成单个操作的测试用例集。
3.2.1 基于值域约束的简单数据类型测试数据生成
为保证生成测试数据的合理性,本节读取WSDL描述信息,从中提取各个类型数据的值域约束信息(XSD restriction)。之后通过随机/边界策略在值域范围内生成测试数据。系统支持的基本数据类型包括整数、布尔值、浮点值、字符串、时间日期、字符串、URL、16进制和base64编码二进制数据等。
3.2.2 基于可变力度组合测试模型的测试数据生成
依据简单数据类型的数据生成方法尽管能够生成不同的多维输入数据,但这些数据并不能保证对复杂类型的子元素的取值组合的充分覆盖。为此,本节依据文献[24-25]提出的组合测试的模型定义,通过One-test-at-a-time策略实现了一个基于可变力度组合模型的复杂数据类型组合测试数据生成算法,以覆盖子元素的组合关系,见算法2。
算法2 One-test-at-a-time策略基本框架
3.2.3 基于数据规则约束的测试数据生成
在服务应用领域,很多数据之间存在一定的数据规则约束以表达业务相关的数据特征,如数值约束、时序约束、结构约束等。基于定义2中Rules规则,本文采用线性不等式和布尔公式组合的方式描述此类约束关系。在原子约束的基础上,通过AND、OR、NOT算子组合成更复杂、更庞大的约束组。一个服务实体的整个约束可以用一棵析取和合取树来表达。该树子节点是一组基本的原子约束,中间节点是AND、OR或NOT关系。
每个原子约束是一个线性不等式或布尔表达式。表达式由约束变量、常量和运算符构成。约束变量的定义如下。
定义4(约束变量)
其中,value是变量名,表示一个服务操作参数的取值;svc是服务地址标识;operation是操作标识;message_xpath是到基本类型数据的xpath路径表达,用以表征一个服务操作的输入中不同的子参数。一个约束变量可以用来表达服务参数的取值,而这些取值又可以表达数据、状态等信息。在约束变量的基础上,可以定义如下的原子约束公式:
该约束公式可以表达操作参数之间的数据约束关系。
3.3 操作序列测试数据生成
与面向对象程序设计中的类成员方法类似,有状态Web服务中的各个操作之间也可能包含较强的联系,存在耦合关系,一个服务操作修改的全局性状态可能被另一个服务操作读取,服务操作之间可能相互影响,因此仅仅对单个操作进行测试是不充分的。基于图5提出的Web服务测试架构,为了生成满足操作序列路径的测试用例集,本节提出了一种有状态Web服务的测试数据生成方法。首先基于3.1节的操作树模型获取操作之间的依赖关系,构建操作接口契约模型(定义5);之后采用语义标注加入操作的行为信息,通过参考文献[26]提出的有限状态机模型(enhanced finite state machine,EFSM)(定义6)描述服务的动态行为,遍历生成服务的操作路径;最终根据接口契约模型生成服务操作序列的测试数据。
定义5(操作接口契约模型)
其中,Spec∶<ID,Name,Description> 为操作基本信息的定义(操作编号、操作名称及操作功能描述);Inputs∶={datai}为输入参数集合;Outputs∶={datai}为输出参数集合;Control-Dependence∶={<ID,Dependencei>}为操作之间的控制依赖关系,包括顺序约束以及时间约束,定义执行顺序的各种约束条件;Data-Dependence∶={<ID,Dependencei>}定义操作之间的数据依赖关系。
定义6(EFSM的Web服务形式化模型)它是一个六元组(Q,Σ,Φ,q0,F,QC)。其中,Q是一个有穷集合,叫作状态集,每一个状态表示交互序列中的历史记录或条件判断记录;Σ是一个有穷集合,叫作字母表,它是O×I的笛卡尔积集合,I是操作输入变量的集合,O是操作输出变量的集合;Φ∶Q×Σ×QC→Q是转移函数,Φ表示下一个状态,即给定一个状态,根据输入输出参数条件,EFSM可以转移到另一个或几个状态;q0∈Q是起始状态;F⊆Q是接收状态集,即用户与Web服务结束交互的状态集;QC是状态的条件集,其中条件是由状态和命题逻辑公式通过联接词组成的表达式。
根据定义6的EFSM模型,采用文献[27]的方法进行遍历能够自动化获取操作序列的测试路径。然而根据常规的方法逐个为路径中的操作生成测试数据由于未考虑操作输入/输出依赖关系以及路径执行数据的合法性,会导致数据设计存在缺陷。
为了解决上述问题,本节采用数据分区的方法,对操作的输入输出数据进行合法性校验,以保证测试路径的正常执行,提高测试数据设计的合理性。其次,根据定义5的操作契约模型中的数据依赖关系,对测试序列数据进行匹配,减少不必要的测试数据生成。
算法3用例集生成及优化算法
4 工具设计与实现
本文研制了Web服务自动化测试工具,包含6个功能模块,即WSDL解析模块、SOAP封装导出、单个操作测试数据生成、操作序列测试数据生成、用例执行和结果分析、测试用例管理。
WSDL解析:解析WSDL规范,自动提取有用的信息,如操作、消息和数据结构(XSD),并存入形式化模型树。
SOAP封装导出:为每个操作自动提取一个独立SOAP封装,封装中不含ready-to-send消息,而只有骨架。之后为骨架中每个数据结构生成不同的消息实例,形成实例集,以满足测试的覆盖标准。
单个操作测试数据生成:通过等价类划分、边界值等方法生成满足模型(组合测试、约束模型)要求的数据,代替封装SOAP骨架中的虚拟数据。
操作序列测试数据生成:根据有限状态机模型生成Web服务中存在的操作序列路径,并依据接口契约模型中的数据依赖关系选取单个操作的测试数据作为操作序列测试的初始数据。
用例执行和结果分析:将包含测试数据的SOAP消息封装上传至服务地址,根据服务响应完成接口测试。针对服务返回的报文进行解析,收集用例执行结果,并设定测试用例预期结果与其进行比对,完成功能测试。
测试用例管理:测试集模型树支持XML文件的存储方式,测试集与测试用例通过数据库进行关联,测试用例管理支持测试用例的增删查改,依照具体的服务和操作为排序标准显示测试用例来源。
为保证工具系统的灵活性,测试系统采用了如图8所示的物理结构,由如下基本模块构成:测试用例设计器SOATest、测试任务执行器ServiceExecutor、服务部署容器SvcHost、黄页服务器UDDIServer以及代理转发网关RedirectProxy。
Fig.8 Test generation prototype system architecture图8 测试用例自动生成原型系统体系结构
测试用例设计器SOATest:负责测试用例的设计、测试结果的收集等任务,并提供用户界面,用于编辑和查阅测试用例及其执行信息。
测试任务执行器ServiceExecutor:从测试用例设计器接收测试任务,根据指定的测试任务生成SOAP封装消息报文,将这些报文上发至目标服务,执行测试用例。同时提供部署真实和虚拟服务的服务容器。
服务部署容器SvcHost:用于发布待测服务和安装控制虚拟服务。工具支持多个服务容器同时分布式部署。
黄页服务器UDDIServer:用于发布服务信息,所有发布的服务注册、登记在黄页中,便于检索和使用。
代理转发网关RedirectProxy:用于监控不同服务之间的消息流,支持基于HTTP代理连接和SOCKS代理连接的服务消息转发。
工具的执行界面如图9~图12所示,分别从Web服务测试用例设计、测试数据生成、操作序列测试数据生成及用例测试结果等多方面对原型系统进行展示。
Fig.9 Test cases design interface图9 测试用例设计界面
5 实验评估
为了覆盖上述研究内容,验证工具的有效性,本文选择某型号面向服务的舰船指控系统软件作为待测对象,并进行了一系列实验。实验主要关注两个问题:
问题1工具生成测试用例的覆盖率情况。
问题2工具生成用例集的错误检测能力与已有方法的比较。
5.1 实验案例
本文选取系统软件中的情报处理服务作为验证案例,并覆盖了无状态和有状态两种操作类别,支持的参数数据类型和复杂数据结构。表1列出了实验中用到的Web服务中的7个操作。其中信息显示操作、态势显示操作为无状态服务,不具有操作序列,只需根据其各个操作的输入输出参数类型生成相应的测试用例集。情报处理服务同时包含部分有状态操作,这类操作对于同样的输入参数得到不同的执行结果,服务是有状态的,因而需要进行操作序列的测试。
Fig.10 Test cases generation interface图10 测试数据生成界面
Fig.11 Operation test suite generation interface图11 操作序列用例集界面
5.2 实验方法
Fig.12 Test case execute results interface图12 测试用例执行结果界面
Table 1 Statistics information for testing paths set in case表1 案例程序的测试路径集的信息统计
在实验过程中,应用Web服务自动化测试框架,首先解析待测服务描述文件WSDL,构建形式化树模型和操作树模型。针对服务中的单个操作测试数据,依据输入参数的数据约束模型,生成符合约束规则和组合力度的测试用例数据。之后,对于服务中的操作序列测试数据,依据操作的行为信息,基于构建EFSM模型遍历获取操作序列测试数据,生成服务接口契约模型的依赖关系的测试用例数据。实验中使用SOAP消息对测试用例进行封装,并通过HTTP进行数据传输,将SOAP请求发送到该服务所在的服务器,处理流程包括测试用例的生成选择、测试执行和测试结果分析。
针对问题1,利用现有工具的随机策略为被测服务生成500组测试数据,在生成的测试数据中分别为每个服务选取50,100,150,200,250,300,350,400,450,500组数据组成不同大小的测试用例集合。将每个测试用例集合的测试数据以SOAP消息的形式封装,利用工具SoapUI进行用例执行,并使用商用测评工具LDRATestBed(V 9.5.3)对服务的源代码进行插桩编译。之后自动化执行上述测试用例集,分别获取代码的语句和分支覆盖率情况,并与本文的工具结果进行比较。
针对问题2,为了证明本文方法在用例错误检测能力以及用例规模上的优势,首先在被测服务中植入42个变异体,注入的变异规则类型分为如下5种。
语句删除:将不影响服务代码编译成功的声明进行注释,共产生10个变异体。
布尔值:强制更改语句中的布尔变量值true或false,使得程序判定出错,共产生12个变异体。
逻辑操作:将程序中逻辑判断<、<=、>和>=这4种标识符更替为其余的3种类型或==标识符,共产生8个变异体。
布尔操作:将程序中的布尔判断==或者!=进行更换,共产生8个变异体。
赋值错误:更改软件中的部分变量赋值,共产生4个变异体。
鉴于现有的部分Web服务测试工具不具备自动生成测试数据的功能,在基准方法比较部分除了与现有工具比较外,还加入了与现有Web服务用例生成方法的比较,根据各方法杀死的变异体个数来衡量用例的错误检测能力。
5.3 实验结果
针对问题1,由于单次生成500组随机测试数据存在偶然性,本实验中重复该策略5次,以减少测试结果的误差。通过与随机测试用例的覆盖率情况相比较,本文方法均获得了更好的语句和分支覆盖率,具体如图13、图14所示。从实验结果可以看出,通过随机策略生成的测试数据存在盲目性,既无法很好地考虑数据的结构特征及约束关系,也无法保证操作序列路径的有效性,导致程序中存在未能走到的代码及分支。
Fig.13 Statement coverage of each test suite图13 语句覆盖率对比情况
Fig.14 Branch coverage of each test suite图14 分支覆盖率对比情况
Table 2 Test cases and results表2 测试用例及结果
表2显示了现有Web服务测评工具及方法生成的测试用例杀死服务中变异体的情况。根据实验结果可知,如预期,本文方法用较少的用例杀死了更多的变异体,表明生成的测试用例拥有较强的针对性。文献[28]提出的方法虽能完成基于模型的测试用例生成,可是对复杂数据结构考虑不足,生成的用例检错能力较差。文献[29]中马春燕等人提出的方法虽然检错能力较好,可是获取的用例最多,当系统过大时,容易产生组合爆炸,并且用例执行耗时较长。文献[30]中李盛钢提出的方法获取最少测试用例,达到用例约简的功能,可是用例的错误检测充分性无法保证。文献[31]提出的方法虽然考虑了元素约束关系,但是缺少用户需求组合方面的测试用例设计,无法满足测试需求。在测评工具方面,现有的Web服务商用测评工具更依赖于测试人员手工录入数据,文献[32-33]提出的工具虽然能够自动生成约简的测试用例集,可是对数据之间的约束关系和数据组合考虑不足,生成的测试用例检错能力不强。
此外,据表2所述,实验中有些用例无法得到执行结果,其中有部分是由于无效测试用例生成的,而另一部分是由于生成测试路径测试数据时没有考虑到测试路径的可行性,有些数据可能在路径之中就由于不合法,导致操作序列用例无法执行,无法返回预期结果,因此仅仅依赖于单个操作生成测试数据的方法是不充分的。针对操作序列测试的验证,本文根据服务需求设计文档构建业务流程剖面,获取情报执行模块服务中存在的可执行操作序列的路径为18条,之后采用现有的方法生成操作序列测试数据,并对操作序列执行的覆盖充分性进行分析和计算。各类方法的覆盖情况见表3。
Table 3 Operation sequence coverage adequacy表3 操作序列覆盖充分性
文献[28-29]对于单个操作生成的测试数据普遍路径覆盖率较低。虽然文献[7]也提出了运用数据流的方法加强测试序列的测试,但由于该方法只考虑了少量偶然的操作之间的关系,导致生成用例的数量不够。降低了用例的错误检测能力。文献[26,33]提出使用模型的方法,可是由于模型的生成依赖于测试人员的经验,生成的数据具有严重的不平衡性,降低了测试效率,且没有考虑到数据之间的依赖关系,简单地为每一个操作生成测试数据,会导致用例规模过于庞大,无法满足测试需求。因此,本文方法由于考虑了复杂操作序列的交互过程,避免了服务实体中仍存在无法测试的路径。
6 相关工作
在当前Web服务测试的研究中,Web服务被分为无状态和有状态的Web服务两类[4-5]。对于无状态服务,Tsai等人在文献[17]中提出了基于规约的测试方法,通过扩展WSDL文件来添加数据依赖关系,增强其描述能力。已有文献[35-38]在此基础上,在多方面展开了基于WSDL的Web服务测试用例生成研究,包括通过WSDL文件抽象构建数据类型的抽象模型,复杂数据的约束关系细化,基于变异测试技术的测试数据生成。其中,基于树模型生成数据过程没有考虑用例的约简,导致通过笛卡尔积方法生成的测试用例容易形成组合爆炸,不利于大规模开展测试。变异测试需要大量的计算机资源,并且生成的测试用例取决于变异算子的优劣,因此不能作为常规的测试手段。在有状态服务方面,文献[7,21,26-27]报道了一些操作序列测试路径生成的研究,其中操作序列的构建和测试数据的生成仍然需要依赖手工完成,过程比较繁琐耗时,且缺少具体的扩展应用,具有一定的局限性。文献[39-41]基于含有行为信息的语义Web服务标准,提出了将WSDL-S、OWL-S语义文档转换成为IOPE图、EFSM等模型进行测试路径的自动生成,但是这类方法过度依赖语义信息文件,并且没有考虑如何生成满足测试路径的合理路径,很难得到实际的应用。
现今,存在多类专业面向Web Services的测试商用工具和高效原型工具,大部分与本文工作类似,通过标准WSDL对于服务操作和它们输入、输出参数的定义可以被服务接口黑盒测试。但是,现有的Web服务测试商用工具,如 SoapUI[13]、SOATest[14],需要用户手工设计、产生和撰写测试用例。高效的原型工具,如 WSDLTest[33]、WS-TAXI[32],虽然研究了一些测试数据的自动化生成方法,可是开发的工具不能支持完整的测评过程,且生成数据方案并不能很好地满足测试的数据需求,无法进行操作序列的测试研究。
从上述研究现状来看,Web服务自动化测试方面仍存在很多未解决的难题,尽管存在大量的学术研究,可是能够转化到工业界的应用成果很少,缺少相应的工具支撑。本文提出的基于Web服务自动化测试框架实现Web服务的自动化测试工具,重点研究WSDL的文档解析、单个操作的测试数据生成以及操作序列路径生成,相比于已存在的测试工具拥有更完善的测试策略和更系统的测试方法。
7 结束语
由于Web服务包含大量运行状态行为和无图形化界面等特性,自动化生成测试数据已经成为Web服务测试迫切需要解决的突出问题。本文研究了一种基于WSDL文档解析的数据实例自动生成框架和工具,收集了所有DOM树节点的结构特征和数据元素属性,保证了生成的测试数据能够覆盖Web服务各类操作的测试需求,提高了用例设计的充分性。
为提高用例的错误检测能力,本文工具采用了组合测试和数据约束模型相结合的技术进行测试数据的填充及约简,形成覆盖需求的测试用例集。同时,采用操作树模型增强操作的行为信息,通过有限状态机模型(EFSM)描述操作的动态行为,根据接口契约模型对Web服务输入输出数据进行合法性校验,以保障操作路径的正确执行,从而提高测试数据设计的合理性。今后工作中将进一步完善该工具,考虑更多的Web服务测试需求,增加基于BPEL(business process execution language)的服务组合测试模块,并在服务的压力测试和性能测试方面进行扩展,以更全面地支持Web服务的自动化测试工作。
[1]Elia I A,Laranjeiro N,Vieira M.A practical approach towards automatic testing of Web services interoperability[J].International Journal of Web Services Research,2015,12(3):78-103.
[2]Petrova-Antonova D,Ilieva S,Manova D.TASSA:testing framework for Web service orchestrations[C]//Proceedings of the 10th International Workshop on Automation of Software Test,Florence,Italy,May 16-24,2015.Piscataway,USA:IEEE,2015:8-12.
[3]Geng Weibo,Zhang Yonghong.Application of SOA to military information grid[J].Fire Control&Command Control,2011,36(3):186-189.
[4]Brenner D,Atkinson C,Hummel O,et al.Strategies for the run-time testing of third party Web services[C]//Proceedings of the 2007 International Conference on Service-Oriented Computing andApplications,Newport Beach,USA,Jun 19-20,2007.Washington:IEEE Computer Society,2007:114-121.
[5]Sinha A,Paradkar A M.Model based functional conformance testing of Web services operating on persistent data[C]//Proceedings of the 2006 Workshop on Testing,Analysis,and Verification of Web Services andApplications,Held in Conjunction with the ACM SIGSOFT International Symposium on Software Testing and Analysis,Portland,USA,Jul 17,2006.New York:ACM,2006:17-22.
[6]Xu Lei,Li Yanhui,Chen Lin,et al.A testing method for Web services focusing on user requirements[J].Chinese Journal of Computers,2014,37(3):512-521.
[7]Heckel R,Mariani L.Automatic conformance testing of Web services[C]//LNCS 3442:Proceedings of the 8th International Conference Fundamental Approaches to Software Engineering Held as Part of the Joint European Conferences on Theory and Practice of Software,Edinburgh,UK,Apr 4-8,2005.Berlin,Heidelberg:Springer,2005:34-48.
[8]Mei Hong,Zhang Lu.A framework for testing Web services and its supporting tool[C]//Proceedings of the 2005 IEEE International Workshop on Service-Oriented System Engineering,Beijing,Oct 20-21,2005.Washington:IEEE Computer Society,2005:199-206.
[9]WWW Consortium.WSDL version 2.0[EB/OL].(2007-06-26)[2016-12-02].http://www.w3/org/TR/wsdl20.
[10]W3C.Web service description language(WSDL)version 2.0 part1:core language[EB/OL].(2007-06-26)[2016-12-02].https://www.w3.org/TR/wsdl20/.
[11]Li Zhongjie,Sun Wei,Jiang Zhongbo,et al.BPEL4WS unit testing:framework and implementation[C]//Proceedings of the 2005 International Conference on Web Services,Orlando,USA,Jul 11-15,2005.Washington:IEEE Computer Society,2005:103-110.
[12]Ma Chunyan,Zhu Yi'an,Lu Wei.Automatic test for Web services[J].Computer Science,2012,39(2):162-169.
[13]SoapUI.The Web services testing tool[EB/OL].(2016-10-19)[2016-12-02].http://www.soapui.org/.
[14]ParasoftSOATest[EB/OL].(2015-12-01)[2016-12-02].http://www.parasoft.com/jsp/products/home.jsp?product=SOAP.
[15]PushToTest.PushToTest TestMaker[EB/OL].(2016-03-20)[2016-12-02].http://www.pushtotest.com/products.html.
[16]Bertolino A,Gao Jinghua,Marchetti E,et al.Automatic test data generation for XML schema-based partition testing[C]//Proceedings of the 2nd International Workshop on Automa-tion of Software Test,Minneapolis,USA,May 20-26,2007.Washington:IEEE Computer Society,2007:10-16.
[17]Tsai W T,Paul R A,Wang Yamin,et al.Extending WSDL to facilitate Web services testing[C]//Proceedings of the 7th IEEE International Symposium on High-Assurance Systems Engineering,Tokyo,Oct 23-25,2002.Washington:IEEE Computer Society,2002:171-172.
[18]Bai Xiaoying,Dong Wenli,Tsai W T,et al.WSDL-based automatic test case generation for Web services testing[C]//Proceedings of the International Workshop on Service-Oriented System Engineering,Beijing,Oct 20-21,2005.Washington:IEEE Computer Society,2005:207-212.
[19]Pu Jie,Li Yin,Teng Shibo.Generating test suite for Web services by variable strength combinatorial testing[J].Command Control&Simulation,2015,37(4):123-130.
[20]Hou Kejia,Bai Xiaoying,Lu Hao,et al.Web service test data generation using interface semantic contract[J].Journal of Software,2013,24(9):2020-2041.
[21]Li Li,Wu Chou.Automatic message flow analyses for Web services based on WSDL[C]//Proceedings of the 2007 International Conference on Web Services,Salt Lake City,USA,Jul 9-13,2007.Washington:IEEE Computer Society,2007:880-887.
[22]He Lingjuan,Liu Lianchen,Wu Cheng.A modified operation similarity measure method based on WSDL description[J].Chinese Journal of Computers,2008,31(8):1331-1339.
[23]Horrocks I.SWRL:a semantic Web rule language combining OWLl and RuleML[EB/OL].(2004-05-21)[2016-12-02].http://www.w3.org/submission/2004/SUBM-SWRL-20040521/.
[24]Wang Ziyuan,Xu Baowen,Nie Changhai.Survey of combinatorial test generation[J].Journal of Frontiers of Computer Science and Technology,2008,2(6):571-588.
[25]Wang Ziyuan,Qian Ju,Chen Lin,et al.Generating variable strength combinatorial test suite with one-test-at-a-time strategy[J].Chinese Journal of Computers,2012,35(12):2541-2552.
[26]Keum C S,Kang S,Ko I Y,et al.Generating test cases for Web services using extended finite state machine[C]//LNCS 3964:Proceedings of the 18th IFIP TC6/WG6.1 International Conference on Testing of Communicating Systems,New York,May 16-18,2006.Berlin,Heidelberg:Springer,2006:103-117.
[27]Ma Chunyan,Wu Junsheng,Zhang Tao,et al.Web services testing based on stream X-machine[C]//Proceedings of the 10th International Conference on Quality Software,Los Alamitos,USA,Jul 14-15,2010.Washington:IEEE Computer Society,2010:232-239.
[28]Li Ying,Li Minglu,Yu Jiadi.Web services testing,the methodology,and the implementation of the automation-testing tool[C]//LNCS 3032:Proceedings of the 2nd International Workshop on Grid and Cooperative Computing,Shanghai,Dec 7-10,2003.Berlin,Heidelberg:Springer,2004:940-947.
[29]Ma Chunyan,Du Chenglie,Zhang Tao,et al.WSDL-based automated test data generation for Web service[C]//Proceeding of the 2008 International Conference on Computer Science and Software Engineering,Wuhan,China,Dec 12-14,2008.Washington:IEEE Computer Society,2008:731-737.
[30]Li Shenggang.A method of automatic test data generation based on extended WSDL[D].Chongqing:Southwest University,2010.
[31]Vanderveen P,Janzen M,Tappenden A F.A Web service test generator[C]//Proceedings of the 30th International Conference on Software Maintenance and Evolution,Victoria,Canada,Sep 29-Oct 3,2014.Washington:IEEE Computer Society,2014:516-520.
[32]Bartolini C,Bertolino A,Marchetti E,et al.WS-TAXI:a WSDL-based testing tool for Web services[C]//Proceedings of the 2nd International Conference on Software Testing Verification and Validation,Denver,USA,Apr 1-4,2009.Washington:IEEE Computer Society,2009:326-335.
[33]Sneed H M,Huang Shihong.The design and use of WSDLTest:a tool for testing Web services[J].Journal of Software Maintenance and Evolution:Research and Practice,2007,19(5):297-314.
[34]Shenoy S,Bakar N AA,Swamy R.An adaptive framework for Web services testing automation using JMeter[C]//Proceedings of the 7th International Conference on Service-Oriented Computing and Applications,Matsue,Japan,Nov 17-19,2014.Washington:IEEE Computer Society,2014:314-318.
[35]Xu Wuzhi,Offutt J,Luo Juan.Testing Web services by XML perturbation[C]//Proceedings of the 16th IEEE International Symposium on Software Reliability Engineering,Chicago,USA,Nov 8-11,2005.Washington:IEEE Computer Society,2005:257-266.
[36]Hanna S,Munro M.An approach for specification-based test case generation for Web services[C]//Proceedings of the 2007 International Conference on Computer Systems and Applications,Amman,Jordan,May 13-16,2007.Washington:IEEE Computer Society,2007:16-23.
[37]Siblini R,Mansour N.Testing Web services[C]//Proceedings of the 2005 International Conference on Computer Systems and Applications,Cairo,Egypt,Jan 3-6,2005.Washington:IEEE Computer Society,2005:135.
[38]Jiang Ying,Xin Guomao,Shan Jinhui,et al.A method of automated test data generation for Web service[J].Chinese Journal of Computers,2005,28(4):568-577.
[39]Bertolino A,Polini A.The audition framework for testing Web services interoperability[C]//Proceedings of the 31st EUROMICRO Conference on Software Engineering and Advanced Applications,Porto,Portugal,Aug 30-Sep 3,2005.Washington:IEEE Computer Society,2005:134-142.
[40]Belli F,Linschulte M.Event-driven modeling and testing of Web services[C]//Proceedings of the 32nd Annual IEEE International Computer Software and Applications Conference,Turku,Finland,Jul 28-Aug 1,2008.Washington:IEEE Computer Society,2008:1163-1173.
[41]Paradkar A M,Sinha A,Williams C,et al.Automated functional conformance test generation for semantic Web services[C]//Proceedings of the 2007 International Conference on Web Services,Salt Lake City,USA,Jul 9-13,2007.Washington:IEEE Computer Society,2007:110-117.
附中文参考文献:
[6]许蕾,李言辉,陈林,等.一种面向用户需求的Web服务测试方法[J].计算机学报,2014,37(3):512-521.
[12]马春燕,朱怡安,陆伟.Web服务自动化测试技术[J].计算机科学,2012,39(2):162-169.
[19]普杰,李吟,滕士波.可变力度组合测试的Web服务用例集生成方法[J].指挥控制与仿真,2015,37(4):123-130.
[20]侯可佳,白晓颖,陆皓,等.基于接口语义契约的Web服务测试数据生成[J].软件学报,2013,24(9):2020-2041.
[22]何玲娟,刘连臣,吴澄.一种改进的基于WSDL描述的操作相似性度量方法[J].计算机学报,2008,31(8):1331-1339.
[24]王子元,徐宝文,聂长海.组合测试用例生成技术[J].计算机科学与探索,2008,2(6):571-588.
[25]王子元,钱巨,陈林,等.基于One-test-at-a-time策略的可变力度组合测试用例生成方法[J].计算机学报,2012,35(12):2541-2552.
[30]李盛钢.一种基于扩展WSDL的测试数据自动生成方法[D].重庆:西南大学,2010.
[38]姜瑛,辛国茂,单锦辉,等.一种Web服务的测试数据自动生成方法[J].计算机学报,2005,28(4):568-577.
2016-09,Accepted 2016-12.
Requirement Coverage OrientedAutomatic Testing Framework for Web Services*
LI Yin1+,FANG Jianyong1,JIANG Meng2
1.JiangsuAutomation Research Institute,Lianyungang,Jiangsu 222061,China
2.Lianyungang Technical College,Lianyungang,Jiangsu 222061,China
+Corresponding author:E-mail:leein121999@126.com
Web services are the W3C-endorsed realization of service-oriented architecture(SOA).Since Web services are tested in black-box via their interfaces,how to automatically generate effective test suites has become a key problem in Web services automatic testing.However,the existing tools take insufficient account of WSDL(Web services description language)schema structure and the dependency between data elements,and lack of effective means of test automation,which may lead to high cost and test data can't cover the test requirements.This paper proposes a test case generate framework and implements a tool which supports the above framework.At first,this framework acquires SOAP(simple object access protocol)skeletons which cover structural characteristics based on WSDL,then generates SOAP envelopes based on variable strength combinatorial testing model,finally generates operation sequence test path through the finite state machine/interface contract model.The experimental results show that the proposed framework can enable the test to achieve the desired coverage,while enhancing the fault detection ability and optimality on the size of existing approach.
Web services;service-oriented architecture;automation test framework;variable strength combinatorial test;finite state machine;interface contract model
10.3778/j.issn.1673-9418.1609024
*The Foundation of the 12th Five-Year-Plan of China Ministries and Commissions(国家部委“十二五”课题).
CNKI网络优先出版:2016-12-07,http://www.cnki.net/kcms/detail/11.5602.TP.20161207.0922.010.html
LI Yin,FANG Jianyong,JIANG Meng.Requirement coverage oriented automatic testing framework for Web services.Journal of Frontiers of Computer Science and Technology,2017,11(11):1747-1763.
A
TP311
LI Yin was born in 1988.He received the M.S.degree from Soochow University in 2014.Now he is an engineer at JiangsuAutomation Research Institute.His research interests include software reliability and software testing,etc.
李吟(1988—),男,江苏连云港人,2014年于苏州大学获得硕士学位,现为江苏自动化研究所工程师,主要研究领域为软件可靠性,软件测试等。
FANG Jianyong was born in 1982.He received the M.S.degree from Beihang University in 2013.Now he is a senior engineer at Jiangsu Automation Research Institute.His research interests include software reliability and software testing,etc.
方建勇(1982—),男,安徽滁州人,2013年于北京航空航天大学获得硕士学位,现为江苏自动化研究所高级工程师,主要研究领域为软件可靠性,软件测试等。
JIANG Meng was born in 1988.She received the M.S.degree from Nanjing Normal University in 2014.Now she is a teacher at Lianyungang Technical College.Her research interest is statistical analysis.
江梦(1988—),女,江苏连云港人,2014年于南京师范大学获得硕士学位,现为连云港职业技术学院教师,主要研究领域为统计分析。