1、REST簡介
REST(代表性狀態傳輸,Representational State Transfer)是一種Web服務設計模型。REST定義了一組體系架構原則,可以根據這些原則設計以系統資源為中心的Web服務,包括使用不同語言編寫的客戶端如何通過HTTP處理和傳輸資源狀態。 是基於SOAP和WSDL的Web服務的更為簡單的替代方法。采用了相對更易於使用、面向資源的模型來公開其服務。 在REST樣式的Web服務中,每個資源都有一個地址。資源本身都是方法調用的目標,方法列表對所有資源都是一樣的。這些方法都是標准方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括HEADER和OPTIONS。
基於REST的Web服務應該遵循的四個基本設計原則:
1)顯式地使用HTTP方法
2)無狀態
3)公開目錄結構式的URI
4)傳輸XML、JavaScript Object Notation (JSON)或同時傳輸這兩者
2、REST性能測試工具
LR對基於SOAP協議的webservice已經有了較好的支持,但是對於REST風格的webservice目前還沒有提供直接支持,可以利用LR中自定義http協議來模擬REST請求以實現對REST的支持。
用於測試webservice的soapUI工具也支持對REST服務的測試,不過soapUI工具最大的不足是沒有腳本的支持,對於一些特殊情況下可能存在問題,比如某些參數值依賴其他的服務的結果而需要關聯時。
開源性能測試工具Jemter 2.10版本中沒有直接提供REST取樣器,是否可以使用HTTP或XML-RPC取樣器來實現REST的性能測試,以及是否存在對REST提供支持的擴展插件還有待學習驗證。
另外有一款小巧的專門針對REST的測試工具restclient可以對REST進行功能測試,可以做一些性能測試前的功能驗證等測試工作,restclient提供了非常豐富的Content-type類型(上百種),如下圖所示。
3、使用soapUI測試REST服務
3.1 在soapUI中新建項目
soapUI把REST服務、資源和操作組織成了一個層次結構,如下圖所示:
項目定義:位於最上層,項目可以包含多個服務定義;
服務定義:服務其實是對多個REST資源的分組,如上例的BookStoreService服務;
資源定義:具體描述該資源的名稱、URI、參數等屬性;
方法定義:針對每個資源的方法,包括GET、POST、PUT、DELETE等類型的方法;
操作定義:每個方法可以建立一個或多個請求,比如XML格式或JSON格式的請求,這些請求才是真正被soapUI所調用執行的。每個請求可以設置豐富的消息,例如自定義請求頭等。運行了該請求后,就能以各種方式查看運行結果了。
以下展示具體在soapUI中新建項目的操作步驟:
① 打開soapUI,創建工程;
② 彈出創建工程窗口,輸入新建項目的名稱並勾選創建REST服務對話框,點擊OK按鈕;
③ 彈出創建REST服務窗口,輸入接口的域名地址,勾選創建REST資源對話框,點擊OK按鈕;
④ 彈出New REST Resource窗口,輸入名稱和resource URL,點擊OK按鈕;
⑤ 彈出 New REST Method窗口,輸入方法名稱,選擇請求方法,點擊OK按鈕;
⑥ 雙擊請求,在如下窗口中可以隊請求進行設置,Accept設置接受的媒體類型,左下方可以設置請求的屬性和參數,右下方設置認證、自定義頭、附件等信息。
新建完成一個項目后點擊右上方的三角按鈕即可執行了,在界面展示了執行消息和結果。對於測試來說需要對運行結果進行驗證,在soapUI中需要建立測試用例(Testcase)並加入斷言來進行驗證結果。
3.2 在soapUI中新建測試用例
在soapUI中測試用例同樣是一個層次結構,如下圖所示:
TestSuite:測試套,也即是測試用例集,其中可以加入多個TestCase
TestCase:測試用例,可以包含多個測試步驟
TestStep:測試步驟,有多種類型,如REST請求、Groovy腳本等,TestStep還支持分支調轉操作,根據特定的條件從一個step調轉到其他step,而改變執行順序。
在soapUI中新建測試用例的方式有兩種,一種是自動創建,直接在操作名稱上右鍵點擊新建測試用例,輸入相關信息來完成測試用例創建,如下圖所示:
另一種是手動創建,在項目名稱上右鍵點擊新建測試套,在彈出的窗口中輸入相關信息來完成測試用例的創建,如下圖所示:
無論采用哪種方式創建測試用例,最終的測試用例如下圖所示,與方法的操作界面類似,左下方可以設置和自定義屬性,右下方可以設置認證、自定義頭等信息。
3.2.1 驗證結果
測試用例新建完后需要增加斷言(Assertions)來驗證結果,也就是相當於LR中的檢查點。soapUI支持如下圖所示的多種斷言來對response進行判斷。可以使用XPath Match和Script Assertions類型的斷言對xml或json格式的response進行判斷。要添加斷言點擊上圖所示的Assertions按鈕。
完成以上測試用例和斷言的創建后,點擊三角按鈕就可以運行測試用例了,可以在測試套、測試用例等不同層級上執行。
3.2.2 性能測試
性能測試在soapUI中稱為Load Test,正對一個TestCase可以建立一個或多個Load Test,這些Load Test會自動把TestCase中的所有步驟添加到其中,在運行的時候,soapUI使用多線程來運行這些TestStep,同時監控它們的運行時間等指標。只需在Load Test上右鍵點擊New LoadTest,輸入名稱即可創建一個性能測試,如下圖所示,可以設置運行線程數、並發策略、迭代時間等,主界面實時顯示運行時響應時間、TPS、錯誤數等監控數據,點擊右上角的圖像按鈕可以顯示監控圖形。
參考資料
使用soapUI測試rest服務:http://www.ibm.com/developerworks/cn/opensource/os-cn-soapui/
最佳實踐:更好的設計你的REST API:http://www.ibm.com/developerworks/cn/web/1103_chenyan_restapi/
基於REST的web服務基礎:http://www.ibm.com/developerworks/cn/webservices/ws-restful/