`

基于SOAP报文的纯服务端测试

阅读更多

AbstractXFireTest扩展于JUnit标准的TestCase类,提供了向某个Web Service发送SOAP请求报文并对返回的SOAP响应报文进行检验的能力。该测试类提供了若干个方便的断言方法,分别介绍如下:

—  void assertNoFault(Document node):确认SOAP响应报文无错误;

—  java.util.List assertValid(java.lang.String xpath, java.lang.Object node):确认在DOM节点特定路径下有对应的元素,路径通过XPath表达式进行定义,该方法还将匹配的元素以List对象返回,用户可以对匹配的元素进行进一步检验;

—  void assertXPathEquals(java.lang.String xpath, java.lang.String value, Document node):确认特定路径DOM节点为某一特定值;

—  assertInvalid(java.lang.String xpath, java.lang.Object node):确认DOM节点特定路径下未包含元素。

AbstractXFireSpringTest是AbstractXFireTest的子类,在Spring中用户只需要扩展该类并实现该类的抽象方法ApplicationContext createContext(),就可以对Spring容器中用XFire定义的Web Service进行测试了。

为了测试Web Service,我们必须准备一个SOAP请求报文,用户可以简单地手工编写一个,或通过SOAP报文截取工具(如前面我们介绍的TcpTrace、SOAPScope、Apache Axis的TCPMon等)获得一些可用的SOAP请求报文。代码清单16-6是一个访问BbtForumService 服务的请求SOAP报文:

代码清单16-6  request_soap.xml:SOAP报文层面测试

 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

    xmlns:xsd
="http://www.w3.org/2001/XMLSchema"

    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance">

    
<soap:Body>

        
<getRefinedTopicCount

            
xmlns="http://server.xfire.baobaotao.com">

            
<in0 xmlns="http://server.xfire.baobaotao.com">20</in0>

        
</getRefinedTopicCount>

    
</soap:Body>

</soap:Envelope>

 

我们将其保存在request_soap.xml文件中,放置在类路径com/baobaotao/xfire/server下。当该SOAP请求报文发送给BbtForumService的Web Service后,我们预计它应该返回如代码清单16-7所示的正确的SOAP响应报文:

代码清单16-7  SOAP响应报文

 

<?xml version="1.0" encoding="UTF-8"?>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  
<soap:Body>

    
<getRefinedTopicCountResponse xmlns="http://www.baobaotao.com">

      
<out>32</out>

    
</getRefinedTopicCountResponse>

  
</soap:Body>

</soap:Envelope>

 

下面,我们着手编写测试BbtForumService Web Service的测试类,以验证实际SOAP响应报文是否和代码清单16-7中的一样:

代码清单16-8  TestBbtForumService

使用AbstractXFireSpringTest测试Web Service首先要做的第一件事是通过实现createContext()方法构造Spring容器,如①所示。当Spring容器启动时,XFire将自动让容器中的Web Service生效(仅进行测试,不能对外提供服务)。

第二步需要向Web Service发送一个SOAP请求报文以得到一个SOAP响应报文,如②所示。接下来,通过AbstractXFireTest提供的检测DOM内容的方法对报文进行正确性验证。由于代码清单16‑7的SOAP报文体中对应的<getRefinedTopicCountResponse>元素及内部元素都位于http://www.baobaotao.com命名空间中,报文体中没有为这个命名空间定义相应的别名,为了在后续断言方法中能够使用简单的方式定义XPath表达式,我们在④处为http://www.baobaotao.com命名空间定义了一个别名。

理解以上测试代码中几个断言方法的关键在于理解XPath表达式语言,XPath语法内容很丰富,不可能在这里逐一讲解,我们只介绍一些典型的XPath语法以满足常见的测试需求:

— 以“/”为前缀的路径表示从DOM根路径开始,如“/soap:Envelope/soap:Body”;

— 以“//”为前缀的路径表示从DOM任意元素开始查询,如“//out”表示任意元素为out的元素;

— 元素的属性通过@attrName表示,如“//xsd:complexType[@name=""Book""]”表示DOM中任意元素名为complexType并且拥有一个值为Book的name属性的元素;

— 元素的值通过text()表示,如“//test:Response[text()='32']”表示DOM中任意值为32、元素名为Response,且位于test命名空间中的元素。

现在回过头来看⑤、⑥两处的断言方法,相信大家就可以很容易地理解断言规则了,⑤处的断言检测SOAP响应报文是否包含某一特定元素,而⑥处的断言则对元素内的值进行检测。我们也可以通过printNode()方法将一个节点输出到控制台上,以便于查看。

16.5.2  在JVM模式通过客户端进行测试

能够不启动Web服务器的情况下通过客户端程序测试Web Service的功能,这一崭新的测试方法对于开发人员来说一定颇具吸引力。因为,这意味着用户可以完全在IDE环境中运行测试,不需要外部环境的支持。不过享受这一测试好处的应用必须保证客户端和服务端的Web Service都位于同一JVM中,这时请求报文和响应报文直接在JVM内部通道中传输。当使用JVM内部通道传输请求和响应的SOAP报文时,我们只需要调整服务的地址就可以了:

代码清单16-9  TextBbtForumService  JVM模式测试

 

以上代码中,①处的服务地址采用了JVM模式的地址,和其对应的HTTP地址则是http://localhost:8080/baobaotao/service/BbtForumService,所以只需要将服务名前的部分替换为“xfire.local://”就可以了。



々上善若水々 2008-05-15 15:57 发表评论
分享到:
评论

相关推荐

    CXF打印SOAP报文,记录WebService日志

    ### CXF打印SOAP报文与记录WebService日志 在企业级应用开发中,尤其是涉及到服务端接口(如WebService)的设计与实现时,日志记录变得尤为重要。它不仅可以帮助开发者更好地理解系统运行状况、定位问题所在,还能...

    soap消息解析.rar

    SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于在Web服务中交换结构化和类型化的信息。SOAP消息解析是理解、处理和构建SOAP请求和响应的关键步骤。在这个"soap消息解析.rar"压缩包中,包含的是...

    通过SOAP协议发送请求报文

    服务端是webservice接口,通过SOAP协议向服务器发送请求报文

    基于Soap协议下CXF框架开发Webservice

    使用Webservice框架,如CXF,可以使开发者在开发中几乎感觉不到Soap协议的存在,因为这些框架已经把Soap协议封装在XML报文中了,客户端或服务端只需要直接解析或调用这些报文即可。 命名空间在WebService开发中是一...

    SoapUI后台测试相关jar包

    "soap根据报文测试包"可能指的是一个用于根据SOAP报文进行测试的特定工具或脚本。SOAP报文是Web服务通信的基础,它包含了服务请求的所有信息。这个文件可能是为了帮助用户模拟不同的SOAP请求,以便测试后台服务的...

    调用pb开发的webserver(SOAP 1.2)

    调用pb开发的webserver(SOAP 1.2) /* POST /webservice/n_webservice.asmx HTTP/1.1 Host: localhost Content-Type: application/soap+xml; charset=utf-8 Content-Length: length &lt;soap12:Envelope xmlns:xsi=...

    webservice开发方式,报文修改

    SOAPUI是一款非常实用的工具,它不仅能够根据WSDL文件生成测试用例,还能够展示请求和响应报文的详细格式,这对于调试和构建请求报文非常有帮助。以下是一个Java示例,展示了如何手动构造HTTP POST请求并解析响应...

    cxf开发webservice服务端

    总的来说,通过CXF开发Web服务端,我们可以快速构建符合标准的服务,并借助丰富的功能和工具进行调试和测试。无论是新手还是经验丰富的开发者,CXF都是一个强大的选择。在实践中,理解源码、合理利用工具以及编写...

    根据wsdl使用gsoap生成的服务器和客户端

    它提供了一套工具,可以自动生成处理SOAP消息的编码器/解码器,以及从WSDL文件中生成客户端和服务端的代理代码。gSOAP使得在C/C++中实现和调用Web服务变得相对简单。 3. **生成服务器代码**: 使用gSOAP的`soapcpp...

    tcpmonitor用于webservice抓取报文很好用

    4. 数据解析:对于 SOAP 报文,TCPMonitor 能够解析 XML 内容,展示出结构化的请求和响应数据,有助于理解数据交换格式。 5. 存储和导出:可以保存抓取的报文到文件,便于后续分析或共享。支持导出为多种格式,如 ...

    Web服务搜索与执行引擎——WSDL与SOAP

    SOAP消息通常包含在HTTP报文中传输,提供了一种结构化和标准化的方式来传递数据。 在Web服务的交互过程中,服务提供者(Provider)使用WSDL描述服务接口,使得服务消费者(Requester)能够理解并调用服务。请求者...

    基于spring+cxf实现用户文件传输的webservice

    基于spring+cxf实现用户文件传输的webservice 在本文中,我们将探讨如何使用Spring+CXF实现用户文件传输的Webservice。该Webservice提供了基本的报文上传和查询功能,同时还提供了用户身份验证功能。 Spring 和 ...

    用go语言实现的GB28181的服务端和客户端.zip

    GB28181是中国国家公共安全视频...值得注意的是,由于没有具体的标签和子文件名列表,以上分析是基于GB28181服务端和客户端实现的一般性描述。实际的代码结构和实现细节可能会有所不同,具体需参考解压后的源码文件。

    wsdl-报文模板读取(生成类似soapui打开wsdl模板样式)

    在IT行业中,Web服务接口的描述语言(WSDL,Web Services Description Language)是定义应用程序如何通过网络进行...这个过程涉及到XML解析、SOAP报文构造以及GUI编程等多个技术领域,对提升全面的IT技能有显著的帮助。

    Web测试技术大全

    Web Services(如SOAP、WSDL、UDDI)则涉及到服务端的交互和集成测试,是企业级Web应用测试的重点。 #### Web页面功能自动化测试 自动化测试是提高测试效率和覆盖率的有效手段。QTP(Quick Test Professional)等...

    C++ 通过gsoap生成WebServer 和WebClient 内附gsoap包和测试源码

    6. **测试与调试**:压缩包中包含的测试源码可以帮助验证服务端和客户端的正确性。通过运行这些测试,可以确保gSOAP生成的代码按预期工作。 为了更深入地学习如何使用gSOAP,你需要熟悉以下关键概念: - **SOAP...

    CXF 服务端简单实例

    此外,为了测试服务,可以创建客户端调用服务端的接口,通常可以通过CXF的Wsdl2Java工具自动生成客户端代码。 总的来说,这个CXF服务端实例是学习和理解CXF框架如何工作的一个好起点。它涵盖了从创建服务接口到部署...

    用VC实现的WEBSERVICE服务端源码

    通常基于SOAP(Simple Object Access Protocol)或REST(Representational State Transfer)架构。 3. **源码**: 指程序员编写的原始计算机代码,可以被编译器转换成可执行程序。 现在我们详细探讨实现Web Service...

    分布式通信框架-webservice分析笔记1

    SOAP 报文包括请求报文和响应报文,都是采用 XML 格式进行封装的。 六、webservice 的实现 webservice 的实现可以使用多种方法,包括 Apache Axis/Axis2、CXF、 Celtix+Xfire 等。这些工具都提供了强大的...

    CXF 文件记录报文日志,非控制台打印。

    CXF允许开发者通过简单的API来创建客户端和服务端的Web服务,支持多种协议和绑定,如SOAP、RESTful HTTP、JMS等。当我们需要对CXF服务的交互进行调试或监控时,日志记录是必不可少的工具。本文将深入探讨如何在CXF中...

Global site tag (gtag.js) - Google Analytics