一种实现Web服务自动化测试的方法

文档序号:7629395阅读:169来源:国知局
专利名称:一种实现Web服务自动化测试的方法
技术领域
本发明涉及一种实现Web服务自动化测试的方法,特别是一种通过虚拟Web服务容器,对Web服务自动化测试的方法。
背景技术
Web服务(Web Service)是近十年里IT领域出现的新技术之一,它是构建互联网分布式系统的基本部件,并正在成为企业应用集成(EnterpriseApplication Integration,简称EAI)的有效平台。万维网联盟(World WideWeb Consortium,简称W3C)对其定义为“Web服务是一种通过统一资源标识(Uniform Resource Identifier,简称URI)的软件应用,其接口及绑定形式可以通过可扩展标记语言(eXtensible Markup Language,简称XML)定义、描述和检索,并能通过XML消息及互联网协议完成与其他应用的直接交互”。不仅越来越多的企业之间通过Web服务进行业务往来,而且越来越多的企业内部也开始使用Web服务来构建协同工作的分布式系统。Web服务是具有一定功能的程序,对其测试是为了检验服务的功能是否达到了涉及的要求。对于Web服务,一般而言其它企业是无法获知其源代码的,只能通过服务的Web服务描述文件(Web Service Description Language,简称WSDL)生成一个客户端对服务进行测试。这就造成了Web服务软件测试技术基本上还停留在对单个Web服务的测试上,没有对整个Web服务体系的集成测试。当面对多个Web服务组成的协同工作系统时,这些测试技术仅能看到某一个服务的执行结果,而对于该服务执行过程中所调用的其它服务却一无所知。
Altava公司的xmlspy提供对WSDL文件和简单对象访问协议(SimpleObject Access Protocol,简称SOAP,是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议)消息的测试;CapeScience公司的Nettool提供对SOAP消息的截获检查和转发功能。无论是xmlspy还是Nettool都仅仅是对单个SOAP消息的考虑,没有全面进行集成测试的概念。而实际上Web服务组合而成的Web软件越来越强调Web服务之间的协作,Web服务的调用过程可能引发消息和通讯等错误,因此如何测试Web服务间的交互关系,对Web服务软件进行总体测试很重要。
一个由Web服务组成的分布式系统,服务会部署在不同的机器上。服务不仅供客户端来调用,同时它自己也会作为客户端,对其它一个或多个服务进行调用。由于Web服务运行在不同的机器上,给系统集成测试和调试造成了很大的难度。主要体现以下几点1、必须先启动Web服务容器,部署服务后进行测试。服务修改后又得重复这个步骤。这个过程很难实现自动化,当服务要部署到多个容器时,难度更大。
2、当许多Web服务要部署时,不仅会花费大量人力,而需要很多的硬件设施,测试成本很高。
3、当多个Web服务之间有相互调用关系时,这样的系统很难调试,经测试发现错误后,错误的根源会很难跟踪。
4、Web服务之间交换的SOAP消息无法得到有效地记录,这样造成Web服务间的交互关系、依赖关系、调用的时间序列不易确定。

发明内容
本发明的目的在于针对现有技术的不足,提出一种实现Web服务自动化测试的方法,只需要编写一个测试用例就可以完成对一个Web服务或多个具有协作关系的Web服务的功能测试,少了人工部署Web服务的步骤,从而实现自动化。
为实现上述目的,本发明提出了一种实现Web服务自动化测试的方法,其中执行以下步骤步骤1、执行用户编写的测试用例;步骤2、建立系统资源监视模块,监视系统资源的读写;步骤3、建立并启动代理服务器,将系统内的所有网络连接都设置为通过代理服务器来中转;步骤4、JAVA虚拟机根据测试用例中的服务部署代码,来建立虚拟Web服务容器,并在该虚拟Web服务容器中部署服务;步骤5、执行测试用例中的测试验证代码,启动一个调用Web服务的客户端,该客户端建立网络连接对服务进行调用,调用请求由代理服务器接收、并传递给虚拟Web服务容器进行处理,然后将Web服务调用的结果返回给该客户端;步骤6、执行测试验证代码测试其返回值;步骤7、输出测试结果;步骤8、结束测试。
该方法具有以下优点1、Web服务的实现代码不需要修改就可以既运行在真实环境里,也可以运行在虚拟的测试环境里;2、可以将真实环境和虚拟环境组合在一起进行测试,将一部分服务部署在真实环境里,另一部分服务部署在虚拟环境里;3、由于所有的网络连接必须通过网络监控模块,客户端和服务以及服务和服务间传输的SOAP消息都可以被记录下来,以便验证其正确性;4、可以模拟网络连接中的延时和突然中断,控制传输速率以便测试服务在非正常情况下运行时的功能正确性;5、可以监控系统内所有Web服务的运行情况,比如某一时刻,哪些服务在运行,有多少个实例在运行,服务间调用的时间序列等等;
6、所有Web服务运行在同一进程里,可以使用传统的软件调试方法来找出引起系统出错的根源,这要比在不同的机器上进行联合调试要容易的多;7、Web服务的集成测试只需要使用一台计算机,尽管待测系统最终还是会在真实的环境下测试,但是该方法还是能有效地找出待测系统中存在的问题,大幅度减少真实环境下的测试次数,达到降低测试成本的目的。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。


图1为本发明实现Web服务自动化测试方法的流程图;图2为本发明实现Web服务自动化测试方法的实施例的流程图;图3为本发明实现Web服务自动化测试方法的实施例中虚拟容器的建立方法的流程图;图4为本发明实现Web服务自动化测试方法的实施例步骤中代理服务器接收和处理方法的流程图;图5为本发明实现Web服务自动化测试方法的实施例中运行服务对象时需要读系统资源的流程图;图6为本发明实现Web服务自动化测试方法的实施例中运行服务对象时需要写系统资源的流程图。
具体实施例方式
本发明提出了一种能够自动化部署、测试服务,并对服务进行有效跟踪的方法。
如图1所示,为本发明实现Web服务自动化测试方法的流程图,具体执行以下步骤步骤101、执行用户编写的测试用例;步骤102、建立系统资源监视模块,监视系统资源的读写;
步骤103、建立并启动代理服务器,将系统内的所有网络连接都设置为通过代理服务器来中转;步骤104、JAVA虚拟机根据测试用例中的服务部署代码,来建立虚拟Web服务容器,并在该虚拟Web服务容器中部署服务;步骤105、执行测试用例中的测试验证代码,启动一个调用Web服务的客户端,该客户端建立网络连接对服务进行调用,调用请求由代理服务器接收、并传递给虚拟Web服务容器进行处理,然后将Web服务调用的结果返回给该客户端;步骤106、执行测试验证代码测试其返回值;步骤107、输出测试结果;步骤108、结束测试。
该方法为每个虚拟容器维护一个独立的运行环境和一些资源,使得虚拟容器不互相干扰。
如图2所示,为本发明实现Web服务自动化测试方法的实施例的流程图,具体执行以下步骤步骤201、执行用户编写的测试用例,该测试用例是一系列为了实现测试目的的代码,具体包括服务部署代码和测试验证代码,服务部署代码用于指定要建立哪些虚拟容器,以及在其中要部署哪些Web服务,即描述一个Web服务环境,测试验证代码用于建立一个客户端,来对测试环境中部署的服务进行调用,并对其返回值进行验证,验证结果就是整个测试用例的执行结果;步骤202、建立系统资源监视模块,监视系统资源的读写;步骤203、建立并启动代理服务器,设置系统内的所有网络连接都通过代理服务器来中转,测试过程中所有的TCP网络连接都会通过这个代理服务器来转发,不仅包括客户端与服务间,而且包括服务与服务间的连接;通过此模块可以有效地监控客户端与Web服务、Web服务与Web服务间的SOAP报文的传输情况以及对报文的有效性进行验证;同时在转发过程中,可以控制转发速率,以便测试Web服务在低带宽情况下的运行状况;步骤204、JAVA虚拟机根据测试用例中的服务部署代码,来建立虚拟容器,并在其中部署服务,虚拟Web服务容器,也就是虚拟容器,是整个测试系统的核心,它是Web服务的运行环境,在真实环境下,相同的Web服务会在不同的容器里运行,这些服务之间不可能相互干扰,同时Web容器也都会有一些私有的属性和资源,其它的容器是无法读取得;虚拟容器需要来模拟这些真实的情况,做到运行时容器之间互不干扰和服务之间互不干扰,真实的容器独占一个虚拟机,它拥有所有的系统资源,对这些资源的修改不会干扰到其它容器,然而虚拟容器是多个容器共占一个虚拟机,需要将这些资源分配给不同的虚拟容器,并做到对这些资源修改不会改变其它容器的资源状态;步骤205、执行测试验证代码,启动一个调用Web服务的客户端,该客户端会建立网络连接对服务进行调用,调用请求由所述代理服务器接收、并传递给虚拟Web服务容器处理,然后将结果返回给该客户端;步骤106、Web服务调用返回后,执行测试验证代码测试其返回值;步骤207、输出测试结果;步骤208、结束测试;其中,如图3所示,为本发明实现Web服务自动化测试方法的实施例步骤204中虚拟容器的具体建立方法的流程图,包括以下步骤步骤2041、建立一个虚拟容器,为其分配一个唯一的标识;步骤2042、建立一个线程组,设置其标识为虚拟容器的标识;步骤2043、建立一个属于线程组的线程;步骤2044、启动线程,来运行虚拟容器,并初始化属于该虚拟容器的资源。
如图4所示,为本发明实现Web服务自动化测试方法的实施例步骤205中代理服务器接收和处理方法的流程图,包括以下步骤步骤2050、代理服务器接收到调用请求;
步骤2051、代理服务器判断调用是否需要监视,如果是,则执行步骤2052;否则执行步骤2053;步骤2052、系统资源监视模块开始监视网络传输;步骤2053、代理服务器判断是否有需要访问的虚拟容器,如果是,则执行步骤2054;否则建立新的网络连接将调用请求转发给真实的容器,由真实的容器来处理该请求;步骤2054、代理服务器将调用请求交给虚拟容器处理;步骤2055、虚拟容器判断是否存在调用请求的服务对象,服务对象对应一个Web服务,它用来执行Web服务,如果是,执行步骤2058;否则执行步骤2056;步骤2056、虚拟容器判断调用请求的服务是否已经部署,如果是,则执行步骤2057;否则生成错误响应,执行步骤2059;步骤2057、虚拟容器创建服务对象;步骤2058、虚拟容器将调用请求交给服务对象处理,运行该服务对象,并生成响应;步骤2059、代理服务器将响应返回给客户端。
如图5所示,为本发明实现Web服务自动化测试方法的实施例步骤2058中,在运行服务对象的过程中,如果需要读系统资源的流程图,这里的资源在Java体系中指的是系统属性(它有一个名字和一个值)。可以在Java虚拟机里建立系统属性并为其指定值。相同名字的系统属性,虚拟机里只有一份。对于不同的真正Web服务容器,它们运行在各自独立的Java虚拟机里,它们以及在它们里面运行的服务对系统属性的读写不会造成其它容器的系统属性的改变。现在多个虚拟容器运行在同一个Java虚拟机里,通过本发明提供的方法可以让虚拟容器读写各自系统资源,做到互不干扰,具体执行以下步骤步骤20581、系统资源监视模块监视到资源的读取,获取当前线程的所属线程组,根据其标识查找对应的虚拟容器;
步骤20582、系统资源监视模块判断是否存在该虚拟容器,如果是,执行步骤20583;否则执行步骤20584;步骤20583、系统资源监视模块判断虚拟容器是否存在该资源,如果是,执行步骤20585;否则执行步骤20584;步骤20584、系统资源监视模块判断Java虚拟机是否存在该资源,如果是,执行步骤20585;否则返回空值;步骤20585、系统资源监视模块返回资源的值。
如图6所示,为本发明实现Web服务自动化测试方法的实施例步骤2058中,在运行服务对象的过程中,如果需要写系统资源的流程图,具体执行以下步骤步骤20581’、系统资源监视模块监视到资源的写入,获取当前线程的所属线程组,根据其标识查找对应的虚拟容器;步骤20582’、系统资源监视模块判断是否存在该虚拟容器,如果是,执行步骤20583’;否则执行步骤20584’;步骤20583’、系统资源监视模块判断所述虚拟容器是否存在该资源,如果是,执行步骤20587’;否则执行步骤20585’;步骤20584’、系统资源监视模块判断Java虚拟机是否存在该资源,如果是,执行步骤20587’;否则执行步骤20586’;步骤20585’、在虚拟容器里新建该资源,执行步骤20587’;步骤20586’、在Java虚拟机里新建该资源,执行步骤20587’;步骤20587’、写入该资源的值。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。
权利要求
1.一种实现Web服务自动化测试的方法,其中执行以下步骤步骤1、执行用户编写的测试用例;步骤2、建立系统资源监视模块,监视系统资源的读写;步骤3、建立并启动代理服务器,将系统内的所有网络连接都设置为通过代理服务器来中转;步骤4、JAVA虚拟机根据所述测试用例中的服务部署代码,来建立虚拟Web服务容器,并在该虚拟Web服务容器中部署服务;步骤5、执行所述测试用例中的测试验证代码,启动一个调用Web服务的客户端,该客户端建立网络连接对服务进行调用,调用请求由所述代理服务器接收、并传递给虚拟Web服务容器进行处理,然后将Web服务调用的结果返回给该客户端;步骤6、执行所述测试验证代码测试其返回值;步骤7、输出测试结果;步骤8、结束测试。
2.根据权利要求1所述的实现Web服务自动化测试的方法,其中所述步骤1中的测试用例是一系列为了实现测试目的的代码,具体包括服务部署代码和测试验证代码。
3.根据权利要求1或2所述的实现Web服务自动化测试的方法,其中步骤4中所述虚拟容器的具体建立过程,包括以下步骤步骤41、建立一个虚拟容器,为其分配一个唯一的标识;步骤42、建立一个线程组,设置其标识为所述虚拟容器的标识;步骤43、建立一个属于所述线程组的线程;步骤44、启动所述线程,来运行所述虚拟容器,并初始化属于该虚拟容器的资源。
4.根据权利要求1或2所述的实现Web服务自动化测试的方法,其中步骤5中所述代理服务器接收和处理的具体流程为步骤50、所述代理服务器接收到所述调用请求;步骤51、代理服务器判断所述调用是否需要监视,如果是,则执行步骤52;否则执行步骤53;步骤52、所述系统资源监视模块开始监视网络传输;步骤53、代理服务器判断是否有需要访问的虚拟容器,如果是,则执行步骤54;否则建立新的网络连接将所述调用请求转发给真实的容器,由真实的容器来处理该请求;步骤54、所述代理服务器将所述调用请求交给所述虚拟容器处理;步骤55、所述虚拟容器判断是否存在所述调用请求的服务对象,如果是,执行步骤58;否则执行步骤56;步骤56、所述虚拟容器判断所述调用请求的服务是否已经部署,如果是,则执行步骤57;否则生成错误响应,执行步骤59;步骤57、所述虚拟容器创建所述服务对象;步骤58、所述虚拟容器将所述调用请求交给服务对象处理,运行该服务对象,并生成响应;步骤59、所述代理服务器将所述响应返回给所述客户端。
5.根据权利要求4所述的实现Web服务自动化测试的方法,其中所述58中,在运行所述服务对象的过程中,如果需要读系统资源,则执行以下步骤步骤581、系统资源监视模块监视到资源的读取,获取当前线程的所属线程组,根据其标识查找对应的虚拟容器;步骤582、系统资源监视模块判断是否存在所述虚拟容器,如果是,执行步骤583;否则执行步骤584;步骤583、系统资源监视模块判断所述虚拟容器是否存在所述资源,如果是,执行步骤585;否则执行步骤584;步骤584、系统资源监视模块判断所述Java虚拟机是否存在所述资源,如果是,执行步骤585;否则返回空值;步骤585、系统资源监视模块返回所述资源的值。
6.根据权利要求4所述的实现Web服务自动化测试的方法,其中所述58中,在运行所述服务对象的过程中,如果需要写系统资源,则执行以下步骤步骤581’、系统资源监视模块监视到资源的写入,获取当前线程的所属线程组,根据其标识查找对应的虚拟容器;步骤582’、系统资源监视模块判断是否存在所述虚拟容器,如果是,执行步骤583’;否则执行步骤584’;步骤583’、系统资源监视模块判断所述虚拟容器是否存在所述资源,如果是,执行步骤587’;否则执行步骤585’;步骤584’、系统资源监视模块判断所述Java虚拟机是否存在所述资源,如果是,执行步骤587’;否则执行步骤586’;步骤585’、在虚拟容器里新建所述资源,执行步骤587’;步骤586’、在Java虚拟机里新建所述资源,执行步骤587’;步骤587’、写入所述资源的值。
全文摘要
本发明涉及一种实现Web服务自动化测试的方法,包括执行测试用例;建立系统资源监视模块,监视资源的读写;建立并启动代理服务器,将系统内的所有网络连接都设置为通过代理服务器来中转;JAVA虚拟机根据测试用例中的服务部署代码,来建立虚拟Web服务容器,并在该容器中部署服务;执行测试验证代码,启动一个调用Web服务的客户端,该客户端建立网络连接对服务进行调用,调用请求由代理服务器接收、并传递给虚拟Web服务容器进行处理,然后将调用的结果返回给该客户端;执行测试验证代码测试其返回值;输出测试结果。该方法只需要编写一个测试用例就可以完成Web服务的测试,少了人工进行Web服务部署的步骤,从而实现自动化。
文档编号H04L12/26GK1791037SQ20051013253
公开日2006年6月21日 申请日期2005年12月26日 优先权日2005年12月26日
发明者怀进鹏, 胡春明, 李翔, 唐鹏, 刘哲, 王丽凤 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1