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來實現。