接口測試工具之Postman使用手冊


一、Postman簡介

Postman是一款功能強大的網頁調試與發送網頁HTTP請求的工具。

Postman 的優點:

  • 支持各種的請求類型: get、post、put、patch、delete 等
  • 支持在線存儲數據,通過賬號就可以進行遷移數據
  • 很方便的支持請求 header 和請求參數的設置
  • 支持不同的認證機制,包括 Basic Auth,Digest Auth,OAuth 1.0,OAuth 2.0 等
  • 響應數據是自動按照語法格式高亮的,包括 HTML,JSON 和 XML

2018年初chrome停止對chrome應用程序的支持,postman插件可能無法正常使用了。目前chrome應用商店能使用的就是chrome擴展程序和主題背景。

所以建議大家直接下載它的應用程序進行使用,下載完成之后,選擇默認安裝即可

Postman有windows、Mac、Liunx。這里主要介紹Win平台版本的使用。

1、postman的基礎功能:

2、請求區域介紹

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

3、Postman工作原理

發送第一個請求

 

如下圖所示,當您在Postman中輸入請求並單擊Send按鈕時,服務器將接收您的請求並返回Postman在接口中顯示的響應。

 

二、Postman 入門

2.1、發送不同類型HTTP請求

GET請求方法:用於從服務器檢索數據,可以使用Parameters

POST請求方法:旨在將數據傳輸到服務器,返回的數據取決於服務器的實現。可以使用Parameters以及Body將參數傳遞給服務器。

PUT請求方法:主要是從客戶端向服務器傳送的數據取代指定的文檔的內容。可以使用Parameters以及Body將參數傳遞給服務器。

DELETE請求方法:用於刪除服務器上的資源,DELETE請求可以使用Parameters以及body請求體將參數傳遞給服務器。

2.2、Request Header

Request Header(請求頭)用來說明服務器要使用的附加信息,比較重要的信息有 Cookie、Referer、User-Agent 等。在Postman中可以在請求下方的Headers欄目來設置,如下如圖所示

2.3、Response Header

Response Header(響應頭)其中包含了服務器對請求的應答信息,如 Content-Type、Server、Set-Cookie 等,在Postman主界面下方Headers或者Postman Console界面都可以查看Response Header信息。

2.4、授權設置

很多時候,出於安全考慮我們的接口並不希望對外公開。這個時候就需要使用授權(Authorization)機制
授權過程驗證您是否具有訪問服務器所需數據的權限。
當您發送請求時,您通常必須包含參數,以確保請求具有訪問和返回所需數據的權限。
Postman提供授權類型,可以輕松地在Postman本地應用程序中處理身份驗證協議。

Postman支持的授權協議類型如下:

  • No Auth:不需要授權
  • Bearer Token:安全令牌。任何帶有Bearer Token的用戶都可以使用它來訪問數據資源,而無需使用加密密鑰。
  • Basic auth:基本身份驗證是一種比較簡單的授權類型,需要經過驗證的用戶名和密碼才能訪問數據資源。這就需要我們輸入用戶名和對應的密碼。
  • Digest Auth:是一個簡單的認證機制,最初是為HTTP協議開發的,因此也常叫做HTTP摘要。其身份驗證機制非常簡單,它采用哈希加密方法,以避免用明文傳輸用戶的口令。摘要認證就是要核實參與通信的兩方都知道雙方共享的一個口令
  • OAuth 1.0:是一個開放標准,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用
  • OAuth 2.0:
  • Hawk Authentication:是一個HTTP認證方案,使用MAC(Message Authentication Code,消息認證碼算法)算法,它提供了對請求進行部分加密驗證的認證HTTP請求的方法
  • AWS Signature:AWS用戶必須使用基於密鑰HMAC(哈希消息認證碼)的自定義HTTP方案進行身份驗證
  • NTLM Authentication [Beta]

2.5、Cookie設置

cookie是存儲在瀏覽器中的小片段信息,每次請求后都將其發送回服務器,以便在請求之間存儲有用的信息。比如很多網站登錄界面都有保留賬號密碼,以便下次登錄。

由於HTTP是一種無狀態的協議,服務器單從網絡連接上無從知道客戶身份。怎么辦呢?就給客戶端們頒發一個通行證吧,每人一個,無論誰訪問都必須攜帶自己通行證。這樣服務器就能從通行證上確認客戶身份了。這就是Cookie的工作原理。

Cookie是由服務端生成,存儲在響應頭中,返回給客戶端,客戶端會將cookie存儲下來,在客戶端發送請求時,user-agent會自動獲取本地存儲的cookie,將cookie信息存儲在請求頭中,並發送給服務端。

postman也可以設置、獲取、刪除Cookie。可以在cookie Code中進行cookie的設置、新增和刪除

2.6、Postman變量類型

Postman提供了變量設置,有4種變量類型。

  • 本地變量(LocalVariable ):本地變量主要是針對單個URL請求設置的變量,作用域只是局限在請求范圍內。如請求URL如下,設置兩個本地變量(user,passwd)作為參數。請求方式為POST
  • 全局變量(Global Variable):全局變量是指在所有的環境里面,變量值都是一樣的,全局變量的作用域是所有請求。
  • 環境變量(Environment Variable):環境變量指在不同環境,同一個變量值隨着環境不同而變化,比如我們上面舉例場景就可以使用環境變量,當在測試環境時,host值為: dev.postman.com ,當切換到生產環境時,host值變為:postman-echo.com 。
  • 數據變量(Data Variable):數據變量是通過導入外部數據文件(json文件或者csv文件),來獲取變量數據。

下面一一介紹postman變量設置和使用:

環境變量設置

在postman界面點擊右上角眼睛圖標,即可開始設置環境變量和全局變量。環境變量設置過程如下圖所示:我們可以設置兩種環境 test 和 pro;test是開發測試環境; pro是正式的生產環境。host環境變量,根據不同的環境值不一樣。

 

 環境變量的使用

變量的使用,需先切換環境,再引用變量即可,引用格式為使用  {{變量名}} ,如下圖所示:

 

本地變量

本地變量是在Pre-request-Script里面編寫代碼實現,如下代碼:

pm.variables.set("username","devposs");
pm.variables.set("email","aaadf@qq.com");

全局變量

全局變量設置有兩種方式:

  • 點擊界面里設置:和設置環境變量類似,只需在設置環境變量的頁面選擇“Global”,其他和環境變量一樣;注意:當環境變量和全局變量名稱一樣時,切換到某個環境時,環境變量會覆蓋全局變量。
  • 在腳本里設置:使用如下腳本可以設置全局變量:variable_key表示變量名稱, variable_value 表示變量值。例子:
    pm.globals.set("variable_key", "variable_value");

變量引用實例:

在實際接口測試過程中,接口經常會有關聯。比如需要取上一個接口的某個返回值,然后作為參數傳遞到下一個接口作為參數。假設我們要獲取A接口返回的userid值作為B接口的請求參數。

 

根據返回值我們需要從返回值中提取username值。在Test標簽欄下編寫如下腳本獲取username值

//獲取返回的響應值然后轉化為json格式
var jsonData = pm.response.json(); //獲取返回的username值 username=jsonData.json['username']; //控制台日志查看 console.log(username); //將獲取的變量設置全局變量 pm.globals.set("username", username);

B接口請求URL如下:請求方式為GET ,請求如下:postman-echo.com/get?userid={{username}};

先執行A接口的,然后在執行B接口,此時B接口通過全局變量username可以獲得A接口的返回值。

 

2.7、斷言

一般來說執行完測試,我們需要對測試結果來進行校驗,判斷結果是是否符合我們的預期,也就是斷言。在接口測試中一般會根據響應狀態碼或者響應返回的數據來進行斷言。

Postman提供一個測試沙箱(Postman Sandbox) 測試沙箱是一個JavaScript執行環境,可以通過JS腳本來編寫pre-request Script和test Script。

  • pre-request Script(預置腳本)可以用來修改一些默認參數,在請求發送之前執行。有點類似於unittest里面的setUp()方法。
  • test Script(測試腳本)當接收到響應之后,再執行測試腳本。

案例:

 1、接口請求URL如下:請求url,方法為post:postman-echo.com/post; 請求參數:{ "username":"qwerqe"}

 2、斷言:

  • 響應狀態碼:200
  • 響應內容:返回的user參數值與定義的一致
  • 響應時間:小於0.5s
//判定響應狀態碼
pm.test("Status code is 200",function() { pm.response.to.have.status(200); }); //獲取發送的參數值 username=pm.variables.get("username"); console.log(username); //校驗響應內容是否和請求的一致 pm.test("Check username", function () { var jsonData = pm.response.json(); pm.expect(jsonData.json['username']).to.eql(username); }); //檢測響應時間是否小於0.5s pm.test("Response time is less than 5000ms", function () { pm.expect(pm.response.responseTime).to.be.below(5000); });

 

 

2.8、運行Collection

2.8.1、批量執行

當我們想批量測試某個集合里面的各個API時,可以使用Collection Runner來批量運行API,同時可以進行環境變量、迭代執行次數、延遲時間等設置。

 

 

 執行結果

2.8.2、數據驅動

有時我們針對一個接口需要測試很多不同的參數,如果每次一個個的去修改參數值來進行測試這樣效率肯定會比較低下。因此我們需要每次迭代執行傳入不同的參數進行測試,那么需要導入外部數據文件進行參數化,也就是所謂的數據驅動。

數據導入

如下圖所示,data選擇之前我們創建的json數據文件:data.json,文件類型選擇application/json json數據內容如下:

執行結果:同一個接口使用不同的數據請求三次。

 

2.8.3、構建工作流

 在使用“Collection Runner”的時候,集合中的請求執行順序就是請求在Collection中的顯示排列順序。但是,有的時候我們不希望請求按照這樣的方式去執行,可能是執行完第一個請求,再去執行第五個請求,

然后再去執行第二個請求這樣的方式;那么在“Collection Runner”中如何去構建不同的執行順序呢?

直接的方法就是直接在集合里面拖動調整順序,但是每次去拖動也比較麻煩,特別是當請求比較多的時候。這個時候最高效的方法就是通過腳本設置。

首先下載官方提供的案例文件:collection.json 導入到postman,運行Collection結果如下圖所示:

 接下來要調整執行順序為:Request1->Request3->Request2->Request4

//Request1中Test添加如下代碼:表示下一個請求為執行請求名稱為Request3的請求
postman.setNextRequest('Request 3')
//Request3中Test添加如下代碼:表示下一個請求為執行請求名稱為Request3的請求
postman.setNextRequest('Request 2')
//Request2中Test添加如下代碼:表示下一個請求為執行請求名稱為Request3的請求
postman.setNextRequest('Request 4')

注意:第一個執行請求的排序一定要在第一個,且最后一個執行的接口不能去設置請求下一個接口,否則會出現死循環 

執行結果如下:

  

2.9、命令執行

2.9.1、Newman簡介

 Newman是一款基於Node.js開發的可以運行Postman的工具,使用Newman,可以直接從命令行運行和測試Postman集合。

2.9.2、Newman應用

1. 先安裝環境,安裝node.js 

下載地址:https://nodejs.org/en/  ,雙擊后根據提示下一步安裝完成

2、安裝newman

npm install -g newman 

3、安裝newman html報告

npm install -g newman-reporter-html

4、執行測試

首先將postman需要執行的集合導出,如下圖所示:

 

在桌面新建文件夾pmtest,將導出的postman文件和相關數據文件放入。打開cmd進入到pmtest目錄,輸入如下命令:

newman run Writing_test_scripts.postman_collection.json -d data.json -r html

命令說明

  • run代表要執行的postman腳本,即為導出的集合。
  • -d表示要執行的數據,也就是之前導入postman的數據
  • -r生成的測試報告類型,這里生成html格式報告

更多命令用法請輸入newman -h即可查看。

5、報告查看

在測試文件夾pmtest里面可以看到生成的一個newman文件夾,打開就可以看到生成的測試報告。

Html報告樣式:newman-run-report

newman不僅支持生成html報告,還支持其他報告類型:

  • JSON reporter
  • JUNIT/XML reporter
  • Client report
  • Html report

2.10、集成jenkins

Jenkins簡介

Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。

下載與安裝

下載地址:https://jenkins.io/download/ ;下載后安裝到指定的路徑即可。

集成到jenkins的思路其實很簡單,就把之前我們執行測試的cmd命令放到jenkins里面去執行。集成步驟也很簡單:集成步驟

  • 首先新建一個項目: postman_test
  • 然后在構建欄目下拉菜單選擇 Execute Windows batch command

 

 

 

Tips:我的jenkins安裝在C盤因此需要使用命令 d:切換到postman腳本所在盤符。

最后執行結果如下:

 

 

 

使用Jenkins這里記錄兩個問題:

1、Jenkins默認啟動頁面為localhots:8080,如果8080端口被占用無法打開,可以進入到jenkins安裝目錄,找到jenkins.xml配置文件打開,修改如下代碼的端口號即可。

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

2、執行時發現Newman提示不是內部應用程序,但是本地執行確可以的話,因為Jenkins的工作環境下與windows的默認環境有所區別,我們只需要配置一下Jenkins的環境變量即可;

  1、manager Jenkins->manages nodes->選擇需要使用的主機->配置從節點

  2、新建一個鍵值對列表,鍵名PATH,把npm和nodejs的路徑放進來即可

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM