序
網絡上接口測試資料很多,但是都是很散亂的,於是整理下資料,就有了這個blog
什么是接口測試
接口測試是測試系統組件間接口的一種測試。
接口測試可以分為哪幾種
1、系統與系統之間的調用,比如銀行會提供接口供電子商務網站調用,或者說,支付寶會提供接口給淘寶調用
2、上層服務對下層服務的調用,比如service層會調用DAO層的接口,而應用層又會調用服務層提供的接口,一般會通過
3、服務之間的調用,比如注冊用戶時,會先調用用戶查詢的服務,查看該用戶是否已經注冊。
測試思路
對於接口測試,首先測試人員要懂代碼,你只需要知道接口的作用是什么就可以了(有文檔更好,但大部分都沒有);其次,自己去讀開發的代碼;然后,根據該接口功能及代碼寫測試用例。
用例設計:
1:寫一個程序去調用該接口,看是否能夠達到該接口所定義的功能
2:根據該接口參數,構造不同的用例,測試接口在參數合法及非法情況下能否達到預期效果
3:根據該接口中的邏輯,設計不同條件的用例,測試該接口實現代碼的邏輯
4:進行容錯及健壯性測試
5:靜態檢測代碼,看是否有內存泄露、或永遠走不到的分支、代碼規范及邏輯是否合理。
6:對於一些接口,需要進行多線程測試
實現方法
工具來說是很多的,比如loadrunner、soapUI、Jemter等都是可以實現的,本文章中就直接用loadrunner實現,下面的是例子,測試的接口WSDL的鏈接:
http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL
接口測試協議說明
接口測試我們一般用WSDL協議的,WSDL是網絡服務描述語言 ,是對Web Service的描述語言,是一種接口定義語言,用於描述Web Service的接口信息等。
測試步驟
創建腳本
打開LR的Virtual User Generator並新建一個協議為“Web Services”的腳本如下圖:
導入WSDL
新建成功后進入功能和編寫界面后,先點擊“Manage Services”打開管理服務界面(如下圖①),在彈出的“Manage Services”窗口中點擊“Import”(如下圖②),然后在新打開的“Import Service”的窗口中選擇WSDL的導入形式(如下圖③)。因根據WSDL來自不同的方式,選擇對應的方式進行導入
而本手冊以“URL”的形式進行導入,因此填入對應WSDL的URL后點擊“import”(http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL該WSDL為公網的各地市天氣Web Service的WSDL描述地址)。導入成功后將可以看到該WSDL提供的接口描述信息,最后點擊“OK”完成WSDL導入。
選擇發送請求的方法和內容
導入WSDL成功后,進入默認生成的Action函數中,並讓光標停留在該函數中(為了便於后續測試將“Service Call的方法”添加至Action函數中,如下圖①及畫圈處);點擊“Add Service Call”(如下圖②);在打開的“New Web Service Call”窗口中,右上角呈現可調取的方法(如下圖③)。
選取其中一個方法“getSupportCityString”,可在下圖中左下角查看到這個方法中的相關參數,而我們主要使用輸入參數“Input Arguments”(具體輸入填寫規則可見WSDL描述文檔,若沒有明確文檔,需與對應開發人員溝通),對應填入合規的請求值“福建”后點擊“OK”
點擊“OK”后界面回到了腳本編輯界面,並且LR自動把填寫的請求轉化為具體的腳本。我們通過“運行按鈕”(下圖畫圈處)進行回放並查看回放日志結果
默認配置的回放日志如下圖
若要查看詳細日志可通過Vuser菜單下的“Run-time Settings”中General-log下的日志開啟相應的日志類別,成功設置后將會在下一次回放中生效。(回放內容較多因此不在該冊內貼事例圖)
獲取單個結果處理方式
在成功回放腳本后,在Virture User Generator工具欄點“Tree”(如下圖①)將編寫界面切換至樹形界面,再選擇對應的發送請求動作(如下圖②),並切換至該動作對應的快照頁簽下的接收顯示內容(快照是必須成功回放一次腳本后才可生成)
展開上圖的Response信息下的“soap:Body”將呈現服務端返回給我們發出請求的對應數據
然后我們把其中的一個結果作為參數獲取如下圖:
在打開的“XML Parameter Properties”窗口中給該變量定義名稱
點擊OK后在Virture User Generator工具欄點“Script”將樹形界面切換至編碼界面,后可見LR對應生成的獲取單個結果的代碼
我們通過以下語句進行打印獲取參數的結果以驗證是否正確
| lr_output_message(lr_eval_string("{ParamValueA}")); //“{ParamValueA}”對應定義的變量名 |
