前言
對比接口測試工具SoapUI、Jmeter、Postman、LoadRunner,更深入了解工具使用的區別,以及接口測試的原理。
本次使用的接口測試數據如下所示:
接口協議:Soap協議
請求報文:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://192.168.23.203:8080/dmc/services/commonCall">
<soapenv:Header/>
<soapenv:Body>
<com:query soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<opt xsi:type="xsd:string" xs:type="type:string" xmlns:xs="http://www.w3.org/2000/XMLSchema-instance">{"ServiceID":"model","first":"黑龍江省","second":"大慶市"}</opt>
</com:query>
</soapenv:Body>
</soapenv:Envelope>
返回報文:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ns1:queryResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://192.168.23.203:8080/dmc/services/commonCall">
<queryReturn soapenc:arrayType="soapenc:string[][1]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">
<queryReturn soapenc:arrayType="soapenc:string[4]" xsi:type="soapenc:Array">
<queryReturn xsi:type="soapenc:string">SUCCESS</queryReturn>
<queryReturn xsi:type="soapenc:string">a6dae0f8502b431eba2c8688973faf44</queryReturn>
<queryReturn xsi:type="soapenc:string" xsi:nil="true"/>
<queryReturn xsi:type="soapenc:string" xsi:nil="true"/></queryReturn>
</queryReturn>
</ns1:queryResponse>
</soapenv:Body>
</soapenv:Envelope>
一、SoapUI
若只是測試單個接口,新建工程時直接輸入WSDL地址,建完會有一個默認SOAP請求,直接發送報文執行即可。
整體規范操作流程:新建工程》新建測試用例集》新建測試用例》新建測試步驟創建請求
1、新建工程
操作步驟:打開軟件SoapUI 5.2.1,File>New SOAP Project,輸入工程名稱,點擊【OK】

2、新建測試用例集
操作步驟:右擊工程名稱,選擇New TestSuite,輸入測試用例集名稱

3、新建測試用例
操作步驟:右擊測試用例集,選擇New TestCase,輸入測試用例名稱

4、新建測試步驟創建請求
操作步驟:右擊測試用例,Add Step>SOAP Request,輸入步驟名稱



創建完成后的界面如下,輸入請求報文,點擊執行按鈕即可完成接口請求:
二、Jmeter
整體
流程:創建測試計划》創建線程組》創建HTTP請求》創建查看結果樹》執行接口請求》結果樹查看執行結果
1、創建測試計划
操作步驟:打開Jmeter軟件(4.0版本),點擊菜單欄File>New即可出現TestPlan
2、創建線程組
操作步驟:右擊測試計划,Add>Threads(Users)>Thread Group
3、創建HTTP請求
操作步驟:右擊線程組名稱,選擇Add>Sampler>HTTP Request,配置請求內容

4、創建查看結果樹
操作步驟:右擊線程組名稱,選擇Add>Listener>View Results Tree
5、執行接口請求
操作步驟:點擊菜單欄的執行按鈕
6、結果樹查看執行結果
請求結果是失敗的,但是soapui執行是成功的,這時可以通過抓包工具fiddler,分析兩個請求內容的差異,最終定位是由於soapui會自動加入請求頭內容,而jmeter需要手動加入,右擊線程組名稱,選擇Add>Config Element>HTTP Header Manager
請求失敗結果如下:
Fiddler抓包信息,如下圖所示:
注意事項:fiddler抓包時相應工具需要做代理,如SOAPUI點擊菜單欄的Proxy進行代理設置。
加入請求頭,如下圖所示:

重新發送請求,請求結果是成功的,如下圖所示:
三、POSTMAN
整體流程:創建請求,發送請求
1、創建請求,發送請求
操作步驟:點擊+,配置請求信息:請求行(包括:請求方式,請求URL),請求報文(包括:請求頭,請求正文)
四、LoadRunner
1、創建協議腳本,進行腳本開發
操作步驟:選擇HTTP協議創建即可,然后進行腳本開發
腳本內容,如下所示:
Action()
{
web_add_header("SOAPAction","\"\"");
lr_convert_string_encoding("黑龍江省",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"users1");
lr_convert_string_encoding("大慶市",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"users2");
lr_save_string(lr_eval_string("{users}"),"user1");
lr_save_string(lr_eval_string("{users}"),"user2");
lr_start_transaction("dmc");
web_reg_save_param("body",
"LB=",
"RB=",
LAST);
web_reg_find("Fail=NotFound",
"Search=Body",
"SaveCount=code",
"Text=SUCCESS",
LAST);
web_custom_request("xxcx",
"URL=http://192.168.23.203:8080/dmc/services/commonCall?wsdl",
"Method=POST",
"TargetFrame=",
"Resource=0",
"RecContentType=",
"Referer=",
"Mode=HTTP",
"EncType=text/xml;charset=UTF-8",
"Body=<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:com=\"http://192.168.23.203:8080/dmc/services/commonCall\">"
"<soapenv:Header/>"
"<soapenv:Body>"
"<com:query soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"
"<opt xsi:type=\"xsd:string\" xs:type=\"type:string\" xmlns:xs=\"http://www.w3.org/2000/XMLSchema-instance\">{\"ServiceID\":\"model\",\"first\":\"{user1}\",\"second\":\"{user2}\"}</opt>"
"</com:query>"
"<opt xs:type=\"type:string\" xmlns:xs=\"http://www.w3.org/2000/XMLSchema-instance\"/></soapenv:Body>"
"</soapenv:Envelope>",
LAST);
if(atoi(lr_eval_string("{code}")) > 0)
{
lr_end_transaction("dmc", LR_PASS);
}else{
lr_end_transaction("dmc", LR_FAIL);
}
lr_output_message(lr_eval_string("{body}"));
return 0;
}
五、總結
接口的本質就是發送請求報文給服務器,然后服務器返回響應報文。我們對響應報文進行分析,判斷是否和我們發給服務器的請求對應的返回報文相同,從而驗證業務是否正確實現,這即是接口測試。
請求報文由請求行、請求頭、請求正文三部分組成,響應報文由狀態行、響應報頭、響應正文三部分組成。
通過這幾種工具對比,可以發現工具之間的差異是在操作方面的不同,原理方面都是一樣的,都是發送請求報文,驗證返回報文正確性。
綜上,工具的選擇可以根據自己掌握的熟練程度和使用目的來選擇最優的工具。
六、附錄
接口測試工具對比示例下載:
鏈接: https://pan.baidu.com/s/1TxA1eUWWFj-qjNxnn-xd5g?pwd=ipsu 提取碼: ipsu
