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来实现。