RESTful 風格以及postman測試

一、什么是RESTful

1、起源

REST這個詞起源于2000年Roy Thomas Fielding在他的博士論文中提出。
他是HTTP協(xié)議(1.0版和1.1版)的主要設計者、Apache服務器軟件的作者之一、Apache基金會的第一任主席。
而他寫這篇論文的目的是:在符合架構原理的前提下,理解和評估以網絡為基礎的應用軟件的架構設計,得到 一個功能強、性能好、適宜通信的架構。

2、名稱由來

REST,即Representational State Transfer的縮寫,翻譯過來就是"表現層狀態(tài)轉化"

3、特點

REST最大的幾個特點為:資源、統(tǒng)一接口、URI、無狀態(tài)。

4、資源

REST的名稱"表現層狀態(tài)轉化"中,省略了主語。"表現層"其實指的是"資源"(Resources)的"表現層"。

所謂"資源",就是網絡上的一個實體,或者說是網絡上的一個具體信息。它可以是一段文本、一張圖片、一首歌曲、一種服務,總之就是一個具體的實在。你可以用一個URI(統(tǒng)一資源定位符)指向它,每種資源對應一個特定的URI。要獲取這個資源,訪問它的URI就可以,因此URI就成了每一個資源的地址或獨一無二的識別符。

所謂"上網",就是與互聯(lián)網上一系列的"資源"互動,調用它的URI。

5、RESTful 架構

REST對URL的處理還是對Payload的編碼,REST都傾向于用更加簡單輕量的方法設計和實現。值得注意的是REST并沒有一個明確的標準,而更像是一種設計的風格。

REST 指的是一組架構約束條件和原則。滿足這些約束條件和原則的應用程序或設計就是 RESTful。

RESTful架構是對MVC架構改進后所形成的一種架構,通過使用事先定義好的接口與不同的服務聯(lián)系起來。在RESTful架構中,瀏覽器使用POST,DELETE,PUT和GET四種請求方式分別對指定的URL資源進行增刪改查操作。因此,RESTful是通過URL實現對資源的管理及訪問,具有擴展性強、結構清晰的特點。

RESTful架構將服務器分成前端服務器和后端服務器兩部分,前端服務器為用戶提供無模型的視圖;后端服務器為前端服務器提供接口。瀏覽器向前端服務器請求視圖,通過視圖中包含的AJAX函數發(fā)起接口請求獲取模型。

二、REST和SOAP的區(qū)別

首先我們要知道三種主流的Web服務實現方案:

REST:表象化狀態(tài)轉變 (軟件架構風格)
SOAP:簡單對象訪問協(xié)議
XML-RPC:遠程過程調用協(xié)議(已慢慢的被SOAP所取代)

1、效率和易用性

REST由于其面向資源接口設計以及操作抽象簡化了開發(fā)者的不良設計,同時也最大限度的利用了HTTP最初的應用協(xié)議設計理念。

SOAP由于各種需求不斷擴充其本身協(xié)議的內容,導致在SOAP處理方面的性能有所下降。同時在易用性方面以及學習成本上也有所增加。

2、安全性

REST對于資源型服務來說很合適,同時特別適合對于效率要求很高,但是對于安全性不高的場景。

SOAP的成熟性可以給需要提供給多開發(fā)語音的,對于安全性要求較高的接口設計帶來便利。

總結:
簡單數據操作,無事務處理,開發(fā)和調用簡單使用REST架構風格較好。

若有嚴格的規(guī)范和標準定義要求,且前期需要指導多個業(yè)務系統(tǒng)集成和開發(fā)的時,因SOAP風格有清晰的規(guī)范標準定義,SOAP更適合。

三、RESTful實戰(zhàn)

  • GET(SELECT):從服務器取出資源(一項或多項)。
  • POST(CREATE):在服務器新建一個資源。
  • PUT(UPDATE):在服務器更新資源(客戶端提供改變后的完整資源)。
  • PATCH(UPDATE):在服務器更新資源(客戶端提供改變的屬性)。
  • DELETE(DELETE):從服務器刪除資源。

例子:

  • GET /zoos:列出所有動物園
  • POST /zoos:新建一個動物園
  • GET /zoos/id:獲取某個指定動物園的信息
  • PUT /zoos/id:更新某個指定動物園的信息(提供該動物園的全部信息)
  • PATCH /zoos/id:更新某個指定動物園的信息(提供該動物園的部分信息)
  • DELETE /zoos/id:刪除某個動物園
  • GET /zoos/animals/id:列出某個指定動物園的所有動物
  • DELETE /zoos/animals/id:刪除某個指定動物園的指定動物

四、RESTful接口測試流程

1.獲取url

示例.png

如上圖,假若測試用戶列表這個接口,則其url就是/users/list

2.找到所需的傳參,記錄所需的測試用例(測試用例下一部分講)

@Data
public class UserSearch extends Page {

    @ApiModelProperty("昵稱")
    private String nickname;

    @Pattern(regexp = "[\\d]{10}||^\\s$", message = "網號不正確或長度不對!")
    @ApiModelProperty("網號")
    private String userNumber;

    @Pattern(regexp = "^1[3-9]\\d{9}|9[2-8]\\d{9}$|(\\+|00)(297|93|244|1264|358|355|376|971|54|374|1684|1268|61|43|994|257|32|229|226|880|359|973|1242|387|590|375|501|1441|591|55|1246|673|975|267|236|1|61|41|56|86|225|237|243|242|682|57|269|238|506|53|5999|61|1345|357|420|49|253|1767|45|1809|1829|1849|213|593|20|291|212|34|372|251|358|679|500|33|298|691|241|44|995|44|233|350|224|590|220|245|240|30|1473|299|502|594|1671|592|852|504|385|509|36|62|44|91|246|353|98|964|354|972|39|1876|44|962|81|76|77|254|996|855|686|1869|82|383|965|856|961|231|218|1758|423|94|266|370|352|371|853|590|212|377|373|261|960|52|692|389|223|356|95|382|976|1670|258|222|1664|596|230|265|60|262|264|687|227|672|234|505|683|31|47|977|674|64|968|92|507|64|51|63|680|675|48|1787|1939|850|351|595|970|689|974|262|40|7|250|966|249|221|65|500|4779|677|232|503|378|252|508|381|211|239|597|421|386|46|268|1721|248|963|1649|235|228|66|992|690|993|670|676|1868|216|90|688|886|255|256|380|598|1|998|3906698|379|1784|58|1284|1340|84|678|681|685|967|27|260|263)(9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)\\d{4,20}$", message = "手機號碼不正確!")
    @ApiModelProperty("手機號")
    private String mobile;

    @ApiModelProperty("授權方id")
    private String sourceId;
    
}

由上圖可見有4個可傳可不傳的參數,其中兩個注釋了正則表達式,代表若需要傳這兩個參數就必須符合其正則

3.獲取端口號

兩種方式:

  • 在配置文件.properties或.yml文件中找到端口號


    配置文件端口號.png
  • 運行項目:
運行端口號.png

4.發(fā)送請求

本地IP地址除了localhost也可以用127.0.0.1


發(fā)送請求.png

可以發(fā)現此請求并沒有傳任何參數
傳參的示例:


傳參.png

五、編寫功能測試計劃

認識接口狀態(tài)碼:

常見的幾個狀態(tài)碼:

  • 200 - OK 一切正常,對GET和POST請求的應答文檔跟在后面。
  • 401 - 授權失敗
  • 404 - Not Found 無法找到指定位置的資源。
  • 500 -一般是接口的實現代碼有問題

更多狀態(tài)碼可參考https://blog.csdn.net/qq_40028324/article/details/80896768

編寫測試計劃

編寫測試用例要注意以下幾點:

  • 是否滿足前提條件
  • 是否攜帶默認值參數
  • 業(yè)務規(guī)則、功能需求
  • 參數是否必填
  • 參數之間是否存在關聯(lián)
  • 參數數據類型限制
  • 參數數據類型自身的數據范圍值限制

接口測試計劃模板:

接口測試計劃模板

六、使用Postman驗證測試用例

1、官網下載postman

下完雙擊安裝就行,無需其他操作

2、postman界面

postman界面

3、請求區(qū)域

  • 1.Authorization:身份驗證,主要用來填寫用戶名密碼,以及一些驗簽字段,postman有一個helpers可以幫助我們簡化一些重復和復雜的任務。當前的一套helpers可以幫助你解決一些authentication protocols的問題。;
  • 2.Headers:請求的頭部信息
  • 3.Body:post請求時必須要帶的參數,里面放一些key-value鍵值對
  • 4.Pre-requerst Script:可以讓你在 請求之前自定義請求數據,這個運行在請求之前,語法使用JavaScript語句。
  • 5.tests:tests標簽功能比較強大,通常用來寫測試,它是運行在請求之后。支持JavaScript語法。postman每次執(zhí)行request的時候,會執(zhí)行tests。測試結果會在tests的tab上面顯示一個通過的數量以及對錯情況。這個后面會進行詳解,它也可以用來設計用例,比如要測試返回結果是否含有某一字符串
  • 6.form-data:,它將表單數據處理為一條消息,以標簽為單元,用分隔符分開。既可以單獨上傳鍵值對,也可以直接上傳文件(當上傳字段是文件時,會有Content-Type來說明文件類型,但該文件不會作為歷史保存,只能在每次需要發(fā)送請求的時候,重新添加文件。);post請求里較常用的一種
  • 7.x-www-form-urlencoded:對應信息頭-application/x-www-from-urlencoded,會將表單內的數據轉換為鍵值對;
  • 8.raw:可以上傳任意類型的文本,比如text、json、xml等,所有填寫的text都會隨著請求發(fā)送;
  • 9.binary:對應信息頭-Content-Type:application/octet-stream,只能上傳二進制文件,且沒有鍵值對,一次只能上傳一個文件, 也不能保存歷史,每次選擇文件,提交;

當出現接口出現@RequestBody注釋時,測試時用Body傳參,如下:

    @ApiOperation("根據條件查找")
    public IPage<UserVO> findUser(@Valid @RequestBody UserSearch userSearch){
        return  iUserService.findUser(userSearch);
    }

4、使用測試用例

每個接口都可以保存起來方便以后操作:


新建一個文件夾

創(chuàng)建一個文件集

新建一個請求

給接口命名并保存

使用測試用例.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容