接口測試工具postman詳細教程

目錄

什麼是postman?

一、接口請求流程

二、postman使用

GET請求示例

GET響應示例

POST請求示例一

POST請求示例二

POST請求示例三

postman斷言

管理用例---Collections

第一步,創建一個Collections

第二步,往Collections裏添加請求。

Collection精細化---Folder

運行Collection

Collection運行參數化

最後


什麼是postman?

Postman是一款網頁調試與發送網頁HTTP請求的Chrome插件,它可以利用Chrome插件的形式把各種模擬用戶HTTP請求的數據發送到服務器,以便開發人員能夠及時地作出正確的響應,或者是對產品發佈之前的錯誤信息提前處理,進而保證產品上線之後的穩定性和安全性,Postman的頁面相對用戶體驗性比較好,有的公司也已這個插件的模板做二次開發,搭建自己的接口測試平臺。

接口在聯調階段需要一些方便快捷的工具來檢驗我們的接口開發效果。

一、接口請求流程

 

二、postman使用

從流程圖中我們可以看出,一個接口請求需要設置:請求URL,請求方法,請求頭,請求參數。同樣的,在postman中,我們也只需要設置這四項即可完成一次請求。

GET請求示例

 

說明:GET請求的參數在URL鏈接上,所以,GET請求的請求頭與請求參數如在接口文檔中無特別聲明時,可以不填。

GET響應示例

說明:特別標註出了響應HTTP狀態碼與響應正文,還有請求的耗時。需特別注意的是注意區別HTTP狀態碼與響應正文中的狀態碼,只有HTTP狀態碼是200時,才代表這個接口請求是正確的,這個是HTTP協議定義的,而響應正文的狀態碼,是程序員自已定義的,可以是200,也可以定義爲其它值,是爲了讓接口使用者去區分正常數據與異常數據,比如:

 

POST請求示例一

POST表單提交,先看下圖POST表單提交示例:

上圖示例中設置了請求方法,請求URL,請求參數,但沒有設置請求頭。有一個要明確的點是,請求頭中的Content-Type與請求參數的格式之間是有關聯關係的:

 

當選擇x-www-form-urlencoded的參數方式後,postman自動的幫我們設置了Content-Type,所以不需要我們人工干預,這就是使用一款流行工具的好處,把一些基礎點都幫我們處理了。 

POST請求示例二

JSON串提交,如下圖示例:

 

 上圖中,當我們選擇了JSON(application/json)時,postman同樣幫我們自動設置了Content-Type,可以自行的去查看一個Headers.

POST請求示例三

HTTP的POST請求的參數,都是放在請求正文中的,只是根據Content-Type來判斷請求正文的格式,那麼我們同樣可以在表單提交時,選擇raw,然後自行設置Content-Type爲application/x-www-form-urlencoded。

  

 

postman斷言

一個完整的接口測試,包括:請求->獲取響應正文->斷言,我們已經知道了請求與獲取響應正文,接下來將會告訴大家如何用postman進行斷言。

這個”Tests”就是我們需要處理斷言的地方,postman很人性化的幫我們把斷言所用的函數全給準備好了:

 

雖然都是英文,但看懂應該並不懂。OK,英文看着煩,不想看,是吧,那好,我們來設置一個斷言場景,根據這個斷言場景,來教大家如何來用postman的斷言,場景如下:

1.  判斷HTTP返回狀態碼爲200

2.  判斷響應正文中是否包含:"statusCode":200

3.  解析響應正文,並判斷statusCode的值是200,message的值是”Success.”

在SNIPPETS中,往下拉,有一項”Status code:Code is 200”,這個就是爲場景中的第一條準備的,就是判斷HTTP返回狀態碼是否爲200。點擊這一項,可以看到在其左邊出現了:

 

解釋一下這句代碼的意思:

  • tests["Status code is 200"]中的tests是一個內置對象,
  • tests["Status code is 200"]是指爲這個斷言起個名稱叫”Status code is 200”,這個名稱可以自行修改。
  • responseCode.code === 200 中的responseCode是內置對象,
  • responseCode對象中有個屬性是code,是指HTTP狀態碼的code,判斷code是否爲200.

綜合起來,這句代碼的意思是:名稱爲”Status code is 200”的斷言中,判斷responseCode對象的code屬性值是否爲200。

同樣在SNIPPETS中,找到一項”Response body:Contains string”,顧名思義,這條就是爲場景中的第二條準備的,點擊後,在其左邊出現了:

 

我們需要修改一下:

 

場景中的第三條,很顯然,我們需要解析JSON串了,所以,在SNIPPETS中找到”Response body:JSON value check”並點擊,在其左邊出現了:

我們可以看出,這裏面其實是JS代碼,jsonData變量其實是解析完JSON後的對象,在JS中,一個JSON對象獲取其屬性的值,直接是用jsonData.value,於是,我們把代碼給修改一下:

這樣一來,我們可以看到一共有tests的斷言4個,點擊Send,發送請求,在響應區內可以看到如下圖:

 

表示我們的斷言全部通過。

SNIPPETS中還有很多的函數提供給我們了,大家可以自行去體驗一番。

postman的基本使用,已經跟大家講了,並收到了一些反饋,希望能講講postman如何一次運行多個接口請求。歪果仁的技術思想不得不佩服,想用者之所想,把管理用例與運行用例集成在了一起。讓我們一起去歪果仁的技術思想中浪裏個浪去吧!

管理用例---Collections

Collections,集合。也就是將多個接口請求可以放在一起,並管理起來。什麼樣的接口請求可以放在同一個collection裏?在這裏告訴大家可以這樣:一個工程一個Collection,這樣方便查找及統一處理數據。也可以這樣理解:collection即工程。

 

第一步,創建一個Collections

點擊上圖中的帶+號的圖標

 

輸入Name:”demo”,Description:”demo for baixiaosheng”,點擊Create按鈕即創建成功一個Collections.

第二步,往Collections裏添加請求。

 

將準備好的接口請求點擊如上按鈕

 

按上圖選擇好Collection及填寫好Request name後,點擊右下角的Add to collection按鈕,即將一個請求添加進了Collection。

Collection精細化---Folder

在前面講到了collection即工程的概念,工程是可以管理,也是可以模塊化的。隨着放入Collection的請求越來越多,混亂就又出現了,在找一個請求時,要找半天,於是將collection中的請求分門類別就很重要了,歪果仁也想到了,於是,在collection中就可以添加Folder了,將相同場景的請求放入同一個Folder中,於是就實現了模塊化的管理了。

 

點擊上圖中的Add Folder後

添加上Folder name,即模塊名稱後,點擊Create,創建成功一個Folder。

接下來,只需要把相同場景的請求拖入相同的Folder即可,這樣就實現了模塊化的管理了。模塊化以後的結構:

運行Collection

將工程模塊化的用例管理起來後,藉着這個管理起來的東風,也可以將工程模塊化的用例執行起來,即一次執行一整個collection裏的用例,或者執行一個collection裏的某一個Folder裏的用例。

點擊Runner,

 

上圖中的”Choose collection or folder”,如果選擇demo,表示運行demo這一整個collection的用例,如果選擇GET,即只運行demo下的GET模塊下的用例。

  • Environment,即運行環境,是開發環境還是測試環境,需事先配置,大家可以下去自已嘗試一下。
  • Iterations,即重複運行次數。會將選擇好的collection中folder重複運行。
  • Delay,間隔時間。用例與用例間的間隔時間。
  • Data,外部數據加載,即用例的參數化,可以與Iterations結合起來用,實現參數化,也就是數據驅動。
  • Start Test Run,點擊運行,運行完成後,即可得出一個簡易的聚合報告。

Collection運行參數化

在Iterations重複運行時,如果某個用例希望每次運行時,使用不同的數據,那麼應該滿足如下2個條件:

  1.  腳本中要用到數據的地方參數化,即用一個變量來代替,每次運行時,重新獲取當前的運行數據。
  2. 需要有一個數據池,這個數據池裏的數據條數,要與重複運行的次數相同。

Postman的runner給我們提供了Iterations的輸入項,也提供了Data的文件選擇項,也就是意味着數據池是一個外部文件。如果Iterations裏的值爲2,那麼,這個外部文件裏也應該有兩條數據,postman希望我們這個外部文件裏的數據是一個json(當然也可以是其它的數據格式),那麼,爲了表示兩條數據,這個json應該是一個list結構,同時,由於腳本要用到數據的地方需要參數化,需要變量,所以,每一條數據應該就是一個map,map的key對應腳本中的變量.

 

上圖中表示提供了一個msg的變量,每次運行對應不同的值,預示着在腳本中可以用到msg這個變量,那在腳本中如何用?

 

如上圖斷言中用data.msg,其中data是個內置對象,即代表每一次運行的那個map數據,所以,可以用data.msg來獲取每次運行的對應的值,當然,由於是個map,也可以用data[‘msg’]來獲取對應的值。

最後

萬萬沒想到,postman竟然如此之強大!我們還有什麼理由去拒絕?介紹完之後,可能新的問題又來了,如何與jenkins結合實現持續集成?歪果仁的技術思想是很強大的,所以,產生了個newman,是個命令行運行postman請求的工具,建議大家自行去研究下,因爲那確實就只是個命令行的工具而已!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章