CN102710460A - 一种基于单子技术的Web服务测试数据自动生成方法 - Google Patents

一种基于单子技术的Web服务测试数据自动生成方法 Download PDF

Info

Publication number
CN102710460A
CN102710460A CN2012101479940A CN201210147994A CN102710460A CN 102710460 A CN102710460 A CN 102710460A CN 2012101479940 A CN2012101479940 A CN 2012101479940A CN 201210147994 A CN201210147994 A CN 201210147994A CN 102710460 A CN102710460 A CN 102710460A
Authority
CN
China
Prior art keywords
service
function
test
type
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012101479940A
Other languages
English (en)
Other versions
CN102710460B (zh
Inventor
张迎周
顾帅帅
符炜
张卫丰
周国强
邹德国
王参参
陈丽洁
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Post and Telecommunication University
Nanjing University of Posts and Telecommunications
Original Assignee
Nanjing Post and Telecommunication University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing Post and Telecommunication University filed Critical Nanjing Post and Telecommunication University
Priority to CN201210147994.0A priority Critical patent/CN102710460B/zh
Publication of CN102710460A publication Critical patent/CN102710460A/zh
Application granted granted Critical
Publication of CN102710460B publication Critical patent/CN102710460B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

一种基于单子技术的Web服务测试数据自动生成方法主要解决Web服务测试所面临的动态灵活性和可组合重用性的挑战。最主要的是测试用例的单子表示、测试用例的自动生成和Web服务测试的运行这三个部分。具体表现为解析WSDL文档,从其Schema中获得相关输入类型信息,再通过函数makeTestCase自动获得某个服务操作的测试用例,最后将其打包成HTTP包发送给服务端,服务端对HTTP包中的SOAP消息进行解析并返回调用服务的结果。经大量实验数据检验证明本专利的技术1.能根据WSDL正确发送SOAP测试消息并获取返回信息,同时能自动生成其中的测试数据;2.测试时间和测试功率方面比以往的技术更具有优势。

Description

一种基于单子技术的Web服务测试数据自动生成方法
技术领域
本发明给出了一种基于单子和QuickCheck技术的Web服务自动测试框架,解决了用户进行Web服务功能测试时,测试用例的自动生成问题,属于Web服务的测试领域。
背景技术
Web服务(Web Service,简称WS)是一种部署在Web上的对象,它们建立在以XML(可扩展的标记语言)为主的且开放的Web规范技术基础上,因此具有比任何现有的对象技术更好的开放性,是建立可互操作的分布式应用程序的新平台。Web平台是一套标准,它定义了应用程序如何在Web上实现互操作性,我们可以用任何语言,在任何平台上编写需要的Web服务。
Web服务平台主要采用四个技术:
1.XML(可扩展的标记语言):Web服务平台中表示数据的基本格式,它解决了数据表示的问题,但它没有定义怎么扩展这套数据类型;
2.SOAP(简单对象访问协议):提供了标准的RPC方法来调用Web服务,SOAP规范中定义了SOAP消息的格式,以及怎样通过HTTP协议来使用SOAP;
3.WSDL(Web服务描述文档):它是基于XML的,用于描述Web服务及其操作,参数和返回值类型的语言,一些最新的开发工具既能根据Web服务来生成WSDL文档,又能导入WSDL文档,生成调用相应Web服务的代码;
4.UDDI(通用描述、描述和集成):它是由Ariba、IBM、微软等公司倡导的,其目的是在网上自动查找Web服务。
基于Web的系统测试与传统的软件测试不同,它不但需要检查验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。然而,Internet和Web媒体的不可预见性使测试基于Web的系统变得困难。
当前Internet的快速发展和普及使得网络越来越开放、动态和多变,在这样的环境下实现各类资源的共享和集成就成为了计算机软件技术面临的重要挑战之一。为了解决在分布、动态、异构环境下,数据、应用和系统集成的问题,面向服务计算在传统的面向对象、基于构件的开发、分布式对象以及Web技术的基础上,提出了一种新的基于Internet的软件开发、部署和集成的模式。由于服务的分布性、协同性、自主性和动态性的特点,使得基于服务的系统开发在根本上不同于传统的软件开发的模式,传统的软件开发依赖于特定的程序开发语言、程序开发环境和运行环境,但即使分布式系统架构如CORBA、DCOM、J2EE为实现基于标准的系统互连互通做出了一定的努力,但系统构建之间还都必须遵循相同的接口约束。
面向服务的系统开发以服务作为基本的组成要素,服务是一种部署在Internet上的提供特定计算能力的应用软件,只发布可以通过标准的Internet协议访问并调用的接口定义,而隐藏了技术实现的细节。由于Internet开放性、服务及服务协同的动态演化、运行环境多变等特点,存在多种不确定的因素,使得服务的安全性、可靠性、可用性、时效性等可信性质难以得到保证,而测试能提高用户对服务的可信度。
随着面向产品的体系结构逐渐向面向服务的体系结构转变,服务软件的测试技术日趋重要,但是传统的软件测试技术难以适应面向服务的技术发展。面向服务作为一种新的计算模式,目前尚缺乏完善的理论基础。面向服务的测试技术还处在起步阶段,主要针对Web服务的实现,从模型检测和测试两个方面探讨相关协议和描述的正确性。
当前的Web服务面临着动态灵活性和可组合重用性等挑战,因此Web服务测试时用例形式化描述及其自动生成将能很好地缓解这些压力,然而以往的测试技术不能根据特定的数据类型进行测试数据的自动生成,或者只能自动生成一小部分类型的测试数据,本专利从另一角度出发,使用了Haskell语言的单子技术和QuickCheck模块,能进行简单类型以及用户自定义类型数据的自动生成并进行自动化测试,其测试结果包括访问是否成功和所获取的反馈SOAP消息的相关内容。
参考文献。
发明内容
技术问题:本发明的目的是提供一种基于单子技术的Web服务测试数据自动生成方法,并设计和实现了服务测试单子等,故可方便对Web服务的性质进行描述和测试,以期从一定程度上解决Web服务测试所面临的动态灵活性和可组合重用性等挑战。
技术方案:本发明结合单子技术和QuickCheck,实现了Web服务测试用例的自动生成,其中单子概念最初是在1950年代作为范畴论里一种函子而被提出的,采用单子这种规则的表示法可避免定义语义结构时对语义成分的引用,从而加强了语义描述的模块性和扩展性。本专利利用N.Broberg等所设计的支持Web网页动态载入的HSP(Haskell Server Pages)单子来统一描述Web服务的测试用例。而QuickCheck是辅助进行自动随机测试的抽象函数库,最初是被用来编写Haskell程序的测试属性(也称为测试计划或规格说明),并根据属性输入随机选择相应数据进行自动测试,可及时报告测试中所发现的反例;还可利用其中Gen单子方法帮用户自动产生一个或多个测试用例数据,并借助于shrink方法尽量返回反例所对应的“最小”测试用例数据。
Web服务的调用运行是通过简单对象访问协议(SOAP)通信的。SOAP协议允许应用程序通过HTTP进行信息交换,它也是基于XML格式的。本发明主要从用户角度进行Web服务的功能测试,故这里的Web服务测试用例一般指一个SOAP消息。
在本发明中,我们假设一个用户调用某个已发布的服务,用户必须向服务器发送SOAP消息请求,其SOAP消息包含该服务的操作名和操作所需参数值等信息。SOAP消息可以通过分析对应服务的WSDL文档而自动生成。接着,我们再将生成的SOAP消息(测试用例)加载相关HTTP包头信息(如SOAPAction头、包文长度、发送地址等),使之封装成一个HTTP包,然后将之发送给服务端,服务端对HTTP包中的SOAP消息进行解析并返回调用服务的结果。
该方法能自动生成基于互联网Web服务所需要的某些特定输入类型的测试用例,该方法包含的步骤如下:
1)Web服务描述文档WSDL的解析:解析WSDL,简单对象访问协议SOAP消息中两个必要元素<envelope>和<body>;其中<envelope>元素的属性值由WSDL中Schema元素的命名空间属性直接获得,其中Schema负责定义和描述文档的结构和内容模式,这里的文档XML是一种元标记语言,用来描述数据的;<body>元素的子结构主要由对应的服务操作名及其相应的类型结构信息组成;
2)服务类型信息的获取:解析WSDL文档,从其中的Schema元素中收集服务的类型描述信息,并表示成测试数据TestData类型,再用哈希表XsdTable表示最终的Schema所有类型信息;其中除了包含基本简单类型外,还允许用户自定义简单类型,以便生成符合特殊要求的测试用例数据;
3)构造与服务输入类型相应的XML文档:根据上述的Schema信息表以及哈斯卡服务页面单子HSP,给出函数testDataToXml,通过此函数能从一个服务的输入类型生成相应的XML结构文档;
4)自动生成相应的测试用例:根据类型信息,输入类型的XML文档和服务操作名以及从Schema中获取的<envelope>元素的属性值,给出函数makeTestCsae来为某个服务操作自动生成相应的测试用例,并根据WSDL中服务输入类型进行预期返回结果,自动生成XML框架;
5)SOAP消息的封装:在Web服务测试用例之上加载相关的超文本传输协议HTTP的包头信息,其中包括服务请求地址SOAPAction头、包头长度、发送地址,之后将其封装成一个HTTP包,然后将之发送给服务端;
6)SOAP消息的解析:服务端对HTTP包中的SOAP消息进行解析并返回调用服务器的反馈信息,包括访问是否成功和解析Socket包,其中Socket包中包含服务请求地址信息和发送地址信息,并获取反馈消息的相关内容;
7)生成服务自动测试描述函数:根据服务调用函数soapCall,加入能把所生成的测试用例以文件的形式保存的appendFile函数和能输出服务调用后反馈的相关结构的putstrLn函数,最终得到服务自动测试描述函数;
8)Web服务自动测试的运行:将服务自动测试描述函数直接作为能随机产生相应类型值的Gen单子中接口函数QuickCheck的输入,从而可进行Web服务自动测试;
9)特殊服务类型数据的生成:接口函数QuickCheck根据参数中所含的生成器,随机生成若干数据进行测试;此外,如果QuickCheck函数输入参数是个函数f,则QuickCheck函数先利用Gen单子给出f参数类型的生成器,再进行批量测试;客户也可以根据需要重新设计这些数据生成器,并辅助使用Gen单子中所提供的生成器函数;
10)测试用例类型约束:根据上述Gen单子所提供的类型生成器,通过相应的调整,来使测试数据生成器满足WSDL描述中字符串数据类型,如长度、最大长度、最小长度,以及数值型数据类型相关约束,即最大范围、最小范围;
11).  测试属性函数的组合描述:QuickCheck函数最后还提供了一些能将测试属性函数组合起来的描述方法,即条件约束函数、测试数据分类与统计函数,这些函数能辅助更好地进行Web服务测试用例的生成与分析。
有益效果:Web服务使用标准技术在Internet上运行,以XML、SOAP、WSDL和UDDI为核心,致力于软件在应用层的互操作问题。具有以下的一些特点和有益效果:
单子技术:本专利采用单子这种更加规则的表示法替代λ表示法,可避免定义语义结构时对无关语义成分的引用,从而加强了语义描述的模块性和扩展性。单子具有高度的抽象性、反射性、重用性和模块化,又具有易于自动实现扩充和修改的特点,这些特性对软件体系结构和软件构件技术带来了积极的影响。现在,单子已是独立的概念,掌握它不再需要范畴论的知识,而且大量的研究和实践已证实单子系统具有很强的功能,结合单子表示法的简洁性和易读性,因此将为越来越多的人所接受和应用。
QuickCheck技术:它是辅助进行自动随机测试的抽象函数库,最初是被用来编写Haskell程序的测试属性(也称测试计划或规格说明),并根据属性输入随机选择相应数据进行自动测试,可及时报告测试中所发现的反例;还可利用其中Gen单子方法帮用户自动产生一个或多个测试用例数据,并借助于shrink方法尽量返回反例所对应的“最小”测试用例数据。
模块性好:本专利运用单子技术,不仅屏蔽了异构的操作系统、网络和和编程语言,还屏蔽了传统中间件之间的异构性,并支持开放、动态的互操作模式。
自动化程度高:本专利不同于以往的测试数据生成技术,以往的技术需要用户指定输入类型或者只能对少量数据类型(如字符型和数值型)自动生成测试数据,本专利能自动生成用户指定的服务输入类型,并且存在接口允许用户调整数据生成的方式。
测试时间短:本专利使用的方法在网络延迟中断时,就没有再次发送测试,而以往的技术都会在中断后,反复继续发送,因此本专利在测试时间上存在优势。
附图说明
图1是 基于单子和QuickCheck技术的Web服务自动测试框架。
具体实施方式
关于Web服务测试用例的自动生成基本步骤如下:
(1)WSDL文档的解析:解析WSDL,生成SOAP消息中两个必要元素<envelope>和<body>。其中<envelope>元素的属性值可由WSDL中Schema元素的命名空间属性直接获得;<body>元素的子结构主要由对应的服务操作名及其相应的类型结构信息组成。
(2)服务类型信息的获取:解析WSDL文档,从其中的Schema元素中收集服务的类型描述信息,并表示成TestData类型,再用哈希表XsdTable表示最终的Schema所有类型信息。其中除了包含基本简单类型外,还允许用户自定义简单类型,以便生成符合特殊要求的测试用例数据。
(3)构造与服务输入类型相应的XML文档:根据上述的Schema信息表以及前面所提及的HSP单子技术,我们可很方便地给出函数testDataToXml,由此可从一个服务的输入类型生成相应的XML结构文档。
(4)自动生成相应的测试用例:根据类型信息,输入类型的XML文档和服务操作名以及从Schema中获取的<envelope>元素的属性值,我们可以给出函数makeTestCsae来为某个服务操作自动生成相应的测试用例,并根据WSDL中服务输入类型,自动生成预期返回结果的XML框架。
(5)SOAP消息的封装:在将Web服务测试用例(SOAP消息)之上加载相关HTTP包头信息(SOAPAction头、包头长度、发送地址等),之后将其封装成一个HTTP包,然后将之发送给服务端。
(6)SOAP消息的解析:服务端对HTTP包中的SOAP消息进行解析并返回调用服务器的反馈信息,包括访问是否成功和解析Socket包获取反馈消息的相关内容等,其相关操作由函数soapCall完成。
(7)生成服务自动测试描述函数:根据服务调用函数soapCall,我们加入appendFile和putStrLn函数,其作用分别为以文件形式保存所有生成的测试用例和输出服务调用后反馈的相关结果,最终得到服务自动测试描述函数。
(8)Web服务自动测试的运行:我们将服务自动测试描述函数直接作为Gen单子中接口函数QuickCheck的输入,从而可进行Web服务自动测试。
(9)特殊服务类型数据的生成:QuickCheck函数根据参数中所含生成器(Gen单子描述的)随机生成若干数据进行测试。此外,如果QuickCheck输入参数是个函数f,则QuickCheck先利用Gen单子给出f参数类型的生成器,再进行批量测试。当然客户也可以根据需要重新设计这些数据生成器,并可辅助使用Gen单子中所提供的生成器函数(如oneof、elements和suchThat等)。
(10)测试用例类型约束:我们根据上述Gen单子所提供的类型生成器,可以通过相应的调整,来使测试数据生成器满足WSDL描述中字符串数据类型(如enumeration、length、maxLength和minLength等),以及数值型数据类型相关约束(如enumeration、maxInclusive、minInclusive、maxExclusive和minExclusive等)等。
(11)测试属性函数的组合描述:QuickCheck最后还提供了一些测试属性函数的组合描述方法,如条件约束函数“==>”、测试数据分类“classify”与统计“collect”等函数,这些可辅助我们Web服务测试用例生成与分析。
在Web服务单子模型下的Web服务自动测试框架见图1,描述了各个模块之间的相互关系,本专利主要分为测试用例的单子表示,测试用例的自动生成,Web服务测试的运行这三个部分,下面我们详细来讨论这三个部分。
测试用例的单子表示
    因Web服务基本结构是XML格式的,所以其测试用例也应符合XML格式。为后面测试使用方便,本专利利用N.Broberg等所设计的支持Web网页动态载入的HSP(Haskell Server Pages)单子来统一描述Web服务的测试用例。例如,Web服务测试用例类型可统一为:HSP XML,其中HSP单子定义如下:
     type HSP = HSPT IO
    即HSP单子是由N.Broberg等所设计的单子转换器HSPT和基本的输入输出单子IO组合而成。HSP单子转换器致力于以高抽象形式生成和处理XML文档,屏蔽XML语言格式与其他语言间的异构性,从而增加其互操作性,使其能方便嵌入到其他语言(如JavaScript、Haskell、HTML等)模块中。为方便起见,这里直接采用HSP模块中所定义的简单有效的XML文档表示类型,即:
     data XML = Element Name Attributes Children | CDATA String
    HSP工程项目中的HSX(Haskell Source with XML)模块即通过单子转换器HSPT将标准的XML语法格式嵌入到Haskell开发语言中,从而可自由地在Haskell开发源码中直接使用XML语法。例如,借助于HSP单子和HSX语法,可写出如下简洁且可读性很强的Web服务测试用例生成函数:
    makeTC_getOffesetUTCTime :: Double → HSP XML
    makeTC_getOffesetUTCTime offeset =
       <soap:Envelope xmlns:soap=soapURI xmlns:xsd=xsdURI>
         <soap:Body>
            <getOffesetUTCTime xmlns=operURL>
                 <hoursOffset> <% show offeset %> </hoursOffset>
            </getOffesetUTCTime>
         </soap:Body>
       </soap:Envelope> 
     where 
         soapURI = "http://schemas.xmlsoap.org/soap/envelope/"
    xsdURI = "http://www.w3.org/2001/XMLSchema"
    operURL = "http://www.Nanonull.com/TimeService/"
 该makeTC_getOffesetUTCTime函数可用来生成Web服务TimeService中getOffesetUTCTime子服务的测试用例,其输入参数类型Double为getOffesetUTCTime服务的输入参数housOffset的类型。HSP单子提供了一种抽象封装机制,可让XML表达式在其中进行安全运算,同时为其他操作(如上面的Haskell代码嵌入)提供接口(用一对标记符号“<%”和“%>”分开)。所以上述函数代码整体像一段普通的XML格式文档,除了由“<%”和“%>”分开的Haskell代码片断“show offeset”,其中show函数将Double类型转换成可显示的String类型。此外HSP单子中还允许String类型变量直接嵌入到XML语法片断中,如上述的xsdURI和operURL变量。
     一般地,对于类型为Input → Output的服务操作serv,可根据其Input类型生成相应的测试用例,并借助于HSP单子进行表示,即:
    makeTC_serv ::  Input →  HSP XML
2.测试用例的自动生成
 Web服务的调用运行是通过简单对象访问协议(SOAP)通信的。SOAP协议允许应用程序通过HTTP进行信息交换,它也是基于XML格式的。本专利主要从用户角度进行Web服务的功能测试,故这里的Web服务测试用例一般指一个SOAP消息。SOAP消息常包含<envelope>、<header>、<body>和<fault>等主要元素,其中<envelope>和<body>是必须的。若想调用某个已发布的服务,用户必须向服务器发送SOAP消息请求,其SOAP消息包含该服务的操作名和操作所需参数值等信息。SOAP消息可以通过分析对应服务的WSDL文档而自动生成,通过从WSDL文档生成SOAP消息中两必须元素<envelope>和<body>的方法。其中<envelope>元素的属性值可由WSDL中Schema元素的命名空间属性直接获得;<body>元素的子结构主要由对应的服务操作名及其相应的类型结构信息组成。
 所以Web服务测试用例自动生成函数的主体部分应该是解决如何自动生成与服务输入类型所对应结构的XML片段。其主要有3个步骤:
步骤1 我们首先通过解析WSDL文档将Schema中类型表示成如下的TestData类型,并用如下的映射表(哈希表)XsdTable表示最终的Schema所有类型信息。
    type XsdTable = Map String TestData
    data TestData = SimpleData BaseType 
                      | EnumData [String] 
    | ListData [TestData]
                      | ArrayStruct (Int,Int) (String,TestData)
                      | StructData [(String,TestData)] 
    | ChoiceData [TestData]
    data BaseType = String | Boolean | Decimal | Float | Double 
    | Time | Date | Int | Byte | UserDefType
 其中BaseType类型除了包含XSD Schema基本简单类型(如Double、Int、String等),还允许用户自定义简单类型UserDefType以便生成符合特殊要求的测试用例数据。
步骤2 根据上述的Schema信息表以及前面所提及的HSP单子技术(尤其是HSX方法),我们可很方便地给出如下函数testDataToXml,由此可将一个服务的输入类型生成相应的XML结构文档:
    testDataToXml :: XsdTable → TestData → [HSP XML]
其返回类型为HSP XML列表,这是为了匹配诸如列表和数组等类型所对应生成的XML元素集。在算法中,generate和arbitrary为QuickCheck的Gen单子中随机产生相应类型值的函数,arbitrary是由Gen单子统一描述的某个类型值随机生成器,generate根据某个生成器产生一个具体值;cdata和“<<:”为HSP的HSX模块中XML构造函数,cdata将任意字符转换成XML中字符,“<<:”同时向一个XML元素中并列地添加多个子元素。
例如,当e是Schema基本类型e0,则令v=generate(arbitrary::Gen e0); testDataToXml(t,e)={cdata(show v)}
步骤3根据testDataToXml算法以及xsdTable类型信息表,可给出如下函数makeTestCase来为某个服务操作自动生成相应的测试用例:
makeTestCase :: String → TestData → HSP XML
    makeTestCase opName opInputType = 
<soapEnv:Envelope xmlns:soapEnv="http://schemas.xmlsoap.org/soap/envelope/" /> 
    <: ( <soapEnv:Body/> <: ( <opName/>  <<:
                                    <% testDataToXml xsdTable opInputType %> 
    )
    )
其中xsdTable为从WSDL中解析获取的Schema类型信息表,opInputType为服务操作名;函数“<:”是向XML元素中添加子元素。
Web服务测试的运行  
     SOAP消息的一种简单传输过程为:先将SOAP消息封装成一个HTTP包,然后将之发送给服务端,服务端对HTTP包中的SOAP消息进行解析并返回调用服务的结果。本专利利用下面两个函数分别进行SOAP消息的Socket包封装和将其发送到服务器并从返回结果中抽取相关信息:
    soapRequest :: HSP XML → SoapAction → URL → HTTP XML
    getResult :: HTTP XML → IO (Bool,String)
其中SoapAction和URL类型一般是字符型的,分别表示SOAP协议中的SOAPAction头和所需服务服务器的地址。函数soapRequest将在Web服务测试用例(SOAP消息)之上加载相关HTTP包头信息(如SOAPAction头、包文长度、发送地址等),可直接接受HSP XML,以便该函数可融入测试单子框架中;getResult函数按照HTTP协议发送Socket包,并返回服务器反馈的信息,包括访问是否成功和解析Socket包获取反馈正文相关内容等。组合上述两个函数可得如下soapCall函数,以便进行Web服务的调用:
    soapCall :: HSP XML → SoapAction → URL → IO (Bool, String)
    soapCall = getResult . soapRequest
    根据上述Web测试用例生成函数makeTC_getOffesetUTCTime和上述服务调用函数soapCall,可写出如下的服务自动测试描述函数:
    prop_getOffesetUTCTime :: Double → IO Bool
    prop_getOffesetUTCTime offeset = do           
          appendFile "getOffesetUTCTime.xml" (showXML soapXml)
          (isOK, result) ← soapCall soapXml opAction service
    putStrLn $ show offeset ++ " --> " ++ result 
    return isOK
      where
          soapXml  = makeTC_getOffesetUTCTime offset
    opAction = "http://www.Nanonull.com/TimeService/getOffesetUTCTime"
          service  = "http://www.Nanonull.com/TimeService/TimeService.asmx"
其中showXML函数将HSP单子下的XML文档转换成String型以便存储到文件,appendFile和putStrLn函数分别为文件形式保存所有生成的测试用例和输出服务调用后反馈的相关结果。上述prop_getOffesetUTCTime函数可直接作为Gen单子中接口函数QuickCheck的输入,从而可进行Web服务自动测试。
QuickCheck函数根据参数中所含生成器(Gen单子描述的)随机产生若干(默认100个)数据进行测试,其中若某次测试结果为False就停止并输出导致测试失败的数据。此外,如果QuickCheck输入参数也是个函数 f,则QuickCheck先利用Gen单子给出 f 参数类型的生成器,再进行批量测试。
为自动产生数据生成器方便,Gen单子模块中还给出如下的Arbitrary类:
         class Arbitrary a where
         arbitrary :: Gen a
Gen单子中默认将常见的基本类型(如String,Double,Bool,Int等)以及元组、函数等复合类型声明为Arbitrary类实例,即给出了这些类型的数据生成器。用户也可以根据需要重新设计这些数据生成器,并且可辅助使用Gen单子中所提供的生成器产生函数(如oneof、elements和suchThat等)。例如,对于上述TimeService服务中getTimeZoneTime和getCityTime操作,QuickCheck虽然都通过了所有测试用例,但反馈结果分别几乎都是“Unknown Time zone”和“Unknown City”。这是因为这两个服务操作输入参数类型都是String型,而Gen模块中String型数据生成器默认是由若干字母随机组合产生,显然几乎不是有效的TimeZone和City名字。为此我们可以设计如下的用户自定义类型及其数据生成器,这可保证所有测试用例的返回结果都有实际意义:
    newtype CityName = CityName String
    instance Arbitrary CityName where
  arbitrary = elements $ map CityName["Boston","London","Vienna","Tokyo"] 
    newtype TimeZone = TimeZone String 
    instance Arbitrary TimeZone where
  arbitrary = elements $ map TimeZone["EST","CST","MST","PST","UTC+2","GMT"]
其中elements :: [a]  Gen a是根据某个列表构造一个生成器,其产生的数据都来源于该列表中元素。
类似上述的Arbitrary类实例声明,可方便调整测试数据生成器以满足WSDL描述中字符串数据类型的相关约束(如enumeration、length、maxLength和minLength等),以及数值型数据类型相关约束(如enumeration、maxInclusive、minInclusive、maxExclusive和minExclusive等)等。
例如,可在Gen默认的String型生成器基础上写出如下的字符串生成器:
    myStringGen :: Gen String
    myStringGen = suchThat arbitrary guard
    where  guard a = isAlpha (head a) && (length a > 2) && (length a < 6))&& (notElem ‘/’ a ) || elem a [“A10”,”B10”,”c10”]
生成器myStringGen将只随机产生列表[“A10”,”B10”,”c10”]中一个,或者首字符为字母、长度在2和6之间、不含“/”的字符串。其中suchThat为生成器辅助构造函数;arbitrary为多态函数,在这里其类型为Gen String。
除了Gen单子外,QuickCheck还提供了一些测试属性函数的组合描述方法,如条件约束函数“==>”、测试数据分类“classify”与统计“collect”等函数,这些可辅助我们Web服务测试用例生成与分析。

Claims (1)

1.一种基于单子技术的Web服务测试数据自动生成方法,其特征在于该方法能自动生成基于互联网Web服务所需要的某些特定输入类型的测试用例,该方法包含的步骤如下:
1)Web服务描述文档WSDL的解析:解析WSDL,简单对象访问协议SOAP消息中两个必要元素<envelope>和<body>;其中<envelope>元素的属性值由WSDL中Schema元素的命名空间属性直接获得,其中Schema负责定义和描述文档的结构和内容模式,这里的文档XML是一种元标记语言,用来描述数据的;<body>元素的子结构主要由对应的服务操作名及其相应的类型结构信息组成;
2)服务类型信息的获取:解析WSDL文档,从其中的Schema元素中收集服务的类型描述信息,并表示成测试数据TestData类型,再用哈希表XsdTable表示最终的Schema所有类型信息;其中除了包含基本简单类型外,还允许用户自定义简单类型,以便生成符合特殊要求的测试用例数据;
3)构造与服务输入类型相应的XML文档:根据上述的Schema信息表以及哈斯卡服务页面单子HSP,给出函数testDataToXml,通过此函数能从一个服务的输入类型生成相应的XML结构文档;
4)自动生成相应的测试用例:根据类型信息,输入类型的XML文档和服务操作名以及从Schema中获取的<envelope>元素的属性值,给出函数makeTestCsae来为某个服务操作自动生成相应的测试用例,并根据WSDL中服务输入类型进行预期返回结果,自动生成XML框架;
5)SOAP消息的封装:在Web服务测试用例之上加载相关的超文本传输协议HTTP的包头信息,其中包括服务请求地址SOAPAction头、包头长度、发送地址,之后将其封装成一个HTTP包,然后将之发送给服务端;
6)SOAP消息的解析:服务端对HTTP包中的SOAP消息进行解析并返回调用服务器的反馈信息,包括访问是否成功和解析Socket包,其中Socket包中包含服务请求地址信息和发送地址信息,并获取反馈消息的相关内容;
7)生成服务自动测试描述函数:根据服务调用函数soapCall,加入能把所生成的测试用例以文件的形式保存的appendFile函数和能输出服务调用后反馈的相关结构的putstrLn函数,最终得到服务自动测试描述函数;
8)Web服务自动测试的运行:将服务自动测试描述函数直接作为能随机产生相应类型值的Gen单子中接口函数QuickCheck的输入,从而可进行Web服务自动测试;
9)特殊服务类型数据的生成:接口函数QuickCheck根据参数中所含的生成器,随机生成若干数据进行测试;此外,如果QuickCheck函数输入参数是个函数f,则QuickCheck函数先利用Gen单子给出f参数类型的生成器,再进行批量测试;客户也可以根据需要重新设计这些数据生成器,并辅助使用Gen单子中所提供的生成器函数;
10)测试用例类型约束:根据上述Gen单子所提供的类型生成器,通过相应的调整,来使测试数据生成器满足WSDL描述中字符串数据类型,如长度、最大长度、最小长度,以及数值型数据类型相关约束,即最大范围、最小范围;
11)测试属性函数的组合描述:QuickCheck函数最后还提供了一些能将测试属性函数组合起来的描述方法,即条件约束函数、测试数据分类与统计函数,这些函数能辅助更好地进行Web服务测试用例的生成与分析。
CN201210147994.0A 2012-05-14 2012-05-14 一种基于单子技术的Web服务测试数据自动生成方法 Expired - Fee Related CN102710460B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210147994.0A CN102710460B (zh) 2012-05-14 2012-05-14 一种基于单子技术的Web服务测试数据自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210147994.0A CN102710460B (zh) 2012-05-14 2012-05-14 一种基于单子技术的Web服务测试数据自动生成方法

Publications (2)

Publication Number Publication Date
CN102710460A true CN102710460A (zh) 2012-10-03
CN102710460B CN102710460B (zh) 2015-03-04

Family

ID=46903030

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210147994.0A Expired - Fee Related CN102710460B (zh) 2012-05-14 2012-05-14 一种基于单子技术的Web服务测试数据自动生成方法

Country Status (1)

Country Link
CN (1) CN102710460B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102970378A (zh) * 2012-12-13 2013-03-13 中国电子科技集团公司第十五研究所 二进制数据优化传输系统
CN104866422A (zh) * 2015-05-20 2015-08-26 中国互联网络信息中心 Web Service自动化测试系统和方法
CN104899134A (zh) * 2015-04-29 2015-09-09 中国互联网络信息中心 域名注册服务器自动化测试系统和方法
CN104901845A (zh) * 2015-05-18 2015-09-09 中国互联网络信息中心 域名whois服务自动化测试系统和方法
CN106201862A (zh) * 2015-05-25 2016-12-07 阿里巴巴集团控股有限公司 web服务压力测试方法及装置
CN109408363A (zh) * 2018-08-22 2019-03-01 南京理工大学 基于代数规约的Web服务单线测试用例生成方法
CN111694731A (zh) * 2020-05-07 2020-09-22 东南大学 一种基于关键词序列引导搜索的Web应用测试用例生成方法
CN112152697A (zh) * 2020-07-29 2020-12-29 国家电网有限公司 一种电力业务数据编码传输方法、系统及存储介质
CN112199082A (zh) * 2020-10-14 2021-01-08 杭州安恒信息技术股份有限公司 一种http响应处理方法、装置、电子设备及存储介质
CN112291380A (zh) * 2020-09-01 2021-01-29 上海泛微软件有限公司 网络请求处理方法、装置、设备及计算机可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080115116A1 (en) * 2006-11-15 2008-05-15 Timothy Marc Francis Method and apparatus for dynamically binding service component implementations for specific unit test cases
CN101873323A (zh) * 2010-06-21 2010-10-27 南京邮电大学 基于程序切片技术的Web服务平台

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080115116A1 (en) * 2006-11-15 2008-05-15 Timothy Marc Francis Method and apparatus for dynamically binding service component implementations for specific unit test cases
CN101873323A (zh) * 2010-06-21 2010-10-27 南京邮电大学 基于程序切片技术的Web服务平台

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
YINGZHOU ZHANG,ET AL.: "Automatic Testing of Web Services in Haskell Platform", 《JOURNAL OF COMPUTATIONAL INFORMATION SYSTEM》, 30 September 2010 (2010-09-30), pages 2859 - 2867 *
张迎周,等: "基于单子技术的服务计算形式化方法研究", 《第一届全国服务计算学术会议(CCF NCSC 2010)论文集》, 10 August 2010 (2010-08-10), pages 9 - 23 *

Cited By (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102970378A (zh) * 2012-12-13 2013-03-13 中国电子科技集团公司第十五研究所 二进制数据优化传输系统
CN104899134A (zh) * 2015-04-29 2015-09-09 中国互联网络信息中心 域名注册服务器自动化测试系统和方法
CN104899134B (zh) * 2015-04-29 2018-02-02 中国互联网络信息中心 域名注册服务器自动化测试系统和方法
CN104901845A (zh) * 2015-05-18 2015-09-09 中国互联网络信息中心 域名whois服务自动化测试系统和方法
CN104901845B (zh) * 2015-05-18 2018-03-16 中国互联网络信息中心 域名whois服务自动化测试系统和方法
CN104866422A (zh) * 2015-05-20 2015-08-26 中国互联网络信息中心 Web Service自动化测试系统和方法
CN104866422B (zh) * 2015-05-20 2019-02-05 中国互联网络信息中心 Web Service自动化测试系统和方法
CN106201862B (zh) * 2015-05-25 2019-03-15 阿里巴巴集团控股有限公司 web服务压力测试方法及装置
CN106201862A (zh) * 2015-05-25 2016-12-07 阿里巴巴集团控股有限公司 web服务压力测试方法及装置
CN109408363A (zh) * 2018-08-22 2019-03-01 南京理工大学 基于代数规约的Web服务单线测试用例生成方法
CN109408363B (zh) * 2018-08-22 2022-01-11 南京理工大学 基于代数规约的Web服务单线测试用例生成方法
CN111694731A (zh) * 2020-05-07 2020-09-22 东南大学 一种基于关键词序列引导搜索的Web应用测试用例生成方法
CN112152697A (zh) * 2020-07-29 2020-12-29 国家电网有限公司 一种电力业务数据编码传输方法、系统及存储介质
CN112152697B (zh) * 2020-07-29 2022-03-22 国家电网有限公司 基于北斗短报文通信的电力业务数据编码传输方法、系统
CN112291380A (zh) * 2020-09-01 2021-01-29 上海泛微软件有限公司 网络请求处理方法、装置、设备及计算机可读存储介质
CN112199082A (zh) * 2020-10-14 2021-01-08 杭州安恒信息技术股份有限公司 一种http响应处理方法、装置、电子设备及存储介质
CN112199082B (zh) * 2020-10-14 2023-04-14 杭州安恒信息技术股份有限公司 一种http响应处理方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN102710460B (zh) 2015-03-04

Similar Documents

Publication Publication Date Title
CN102710460B (zh) 一种基于单子技术的Web服务测试数据自动生成方法
CN103077185B (zh) 一种基于对象的自定义扩展信息的方法
Tao et al. A reusable software component for integrated syntax and semantic validation for services computing
CN106648945B (zh) 一种接口数据测试方法、装置及电子设备
Wang Improving data transmission in web applications via the translation between XML and JSON
Lathem et al. Sa-rest and (s) mashups: Adding semantics to restful services
US20060248166A1 (en) System and method for client side rendering of a web page
CN110297999A (zh) 一种网页模板生成方法及装置、网页加载方法及前端服务器和网站服务器
US9143378B2 (en) Rendering components within different browser environments
CN110941950B (zh) 接口文档的生成方法、装置、服务器及存储介质
WO2001057652A2 (en) Method and system for building internet-based applications
TW201437826A (zh) 網頁樣式位址合併的方法和裝置
Lampropoulos et al. Automatic WSDL-guided test case generation for PropEr testing of web services
US20090327323A1 (en) Integrating Data Resources by Generic Feed Augmentation
Robinson et al. XCML: A runtime representation for the Context Modelling Language
CN110109675A (zh) 智能合约处理方法、装置以及计算机可读存储介质
WO2001048630A2 (en) Client-server data communication system and method for data transfer between a server and different clients
CN103020033A (zh) 一种支持离线使用的电子表单系统及构建方法和电子表单
KR100453224B1 (ko) 유/무선 인터넷을 이용한 수식 기호 편집장치 및 방법
Bartlett et al. XML security using XSLT
Huang et al. Static and dynamic CIM-XML documents for proprietary EMS
Li et al. High performance web services based on service-specific SOAP processor
Altmann et al. Real-time capable hardware-based parser for efficient XML interchange
Anbalagan et al. An XML data representation model for power system reliability assessment
Moriya et al. Dataflow generation for service composition to incorporate web and telecommunication

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20121003

Assignee: Jiangsu Nanyou IOT Technology Park Ltd.

Assignor: Nanjing Post & Telecommunication Univ.

Contract record no.: 2016320000213

Denomination of invention: Frame-based automatic generating method for Web service test data

Granted publication date: 20150304

License type: Common License

Record date: 20161118

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model
EC01 Cancellation of recordation of patent licensing contract

Assignee: Jiangsu Nanyou IOT Technology Park Ltd.

Assignor: Nanjing Post & Telecommunication Univ.

Contract record no.: 2016320000213

Date of cancellation: 20180116

EC01 Cancellation of recordation of patent licensing contract
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20150304

Termination date: 20180514

CF01 Termination of patent right due to non-payment of annual fee