SoapUI调用webservice实现的两种方式

时间:2024-02-15 13:08:30

SoapUI用来做测试,已经是很多人做过的事情了,而且网上教程也很多。不过还是写下来,对比webservice协议与http协议脚本编写的不同。

首先测接口得有一个服务,刚好笔者所在项目做ESB集成。就顺道用一下工作环境截几张图。

业务模型:

  从客户端post一个字符串给ESB服务器,ESB服务器收到该请求后,返回一个在原字符串前添加一个Hello。

服务器的地址:http://10.3.49.105/soa-web/proxy/ws/AAA-TEST-BBB/xfiresb/services/HelloService

请求的报文

添加三个head
   “Svc_Inbound","TEST"
   ”Svc_ServiceCode","AAA-TEST-BBB"
   "Svc_Version","1"
报文正文
<?
xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.xfiresb.com"> <soapenv:Header/><soapenv:Body> <ser:sayHi> <ser:in0>this is a request</ser:in0> </ser:sayHi> </soapenv:Body></soapenv:Envelope>

服务器返回的报文

<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>
      <ns1:sayHiResponse xmlns:ns1="http://service.xfiresb.com">
         <ns1:out>Hello this is a request</ns1:out>
      </ns1:sayHiResponse>
   </soap:Body>
</soap:Envelope>

1.通过SOAP协议实现

功能的实现,首先用soapui来实现,打开soapui ,file---new soap project

 在工程创建弹出框输入WSDL地址,输入工程名称,点击OK

工程 地址:http://10.3.49.105/soa-web/proxy/ws/AAA-TEST-BBB/xfiresb/services/HelloService?wsdl

双击Request 1,在创建工程时创建的默认请求,双击后会看到该请求内容。编辑request如下,在head标签添加我们的服务需要的head内容:

这样直接点击运行标签,则可直接调用该服务。

这样子就实现了soapui对接口的调用。

2.通过http协议实现

webservice是可以通过多种协议来实现的,但最常用的是http协议,就第一部分的内容,可以通过查看Raw标签查看http请求与返回信息

从上图可以看出,其实SOAP协议其实是通过http协议来传递数据的,而soapui也可以创建http协议来实现接口的调用

创建一个REST工程,直接在弹出框中粘贴url地址(注是server地址,而不是wsdl地址)

构建一个http请求

如上图,头文件全部加上(其实部分head不是必填项,但为了与webservice保持完全一致,这里全部添加上了)

可以看到,这样子实现的http请求也是OK的。

SOAP协议使用的是xml报文,而http协议,则是标准的http报文,只要符合http协议的传递数据,均可以采用http协议来实现数据通信。

原理搞懂了,基本上也没什么难的,可以从接口的定义去理解接口的本质。

这样就实现了SoapUI两种实现接口的调用。对于有公开的wsdl接口的可以通过Soap协议调用,而对于没有公开的WSDL的接口,则可以通过http来实现。

现在数据传递主要是xml报文与json,而json的数据传递更多则是通过http来实现。