Postman簡介
一般簡單的接口測試我們可以直接在瀏覽器里面進行調試,但是涉及到一些權限設置的就無法操作了,因此我們需要接口測試的相關工具;Postman 是一個接口測試和 http 請求的工具。
官網地址:https://www.getpostman.com
Postman 的優點:
- 支持各種的請求類型: get、post、put、patch、delete 等
- 支持在線存儲數據,通過賬號就可以進行遷移數據
- 很方便的支持請求 header 和請求參數的設置
- 支持不同的認證機制,包括 Basic Auth,Digest Auth,OAuth 1.0,OAuth 2.0 等
-
響應數據是自動按照語法格式高亮的,包括 HTML,JSON 和 XML
下載安裝
Postman有windows,Mac、Liunx以及Chrome插件版本。這里主要介紹Win平台版本的使用。
- 官方文檔:https://www.getpostman.com/docs/v6/
- Postman Api文檔:https://docs.postman-echo.com
Postman 入門
安裝好之后啟動程序,進入主界面。准備開始使用Postman.
發送第一個請求
-
啟動軟件后在引導界面點擊Request,給Request命名,然后創建文件夾並把該Request歸屬到該文件夾。
-
在地址欄輸入
postman-echo.com/get
然后點擊 Send按鈕,可以看到返回值。如下圖所示:
Postman工作原理
如下圖所示,當您在Postman中輸入請求並單擊Send按鈕時,服務器將接收您的請求並返回Postman在接口中顯示的響應。
Request編輯
在主界面左側可以查看、保存、編輯Request。
發送不同類型HTTP請求
GET
HTTP GET請求方法用於從服務器檢索數據。
數據由唯一的URI(統一資源標識符)標識。
GET請求可以使用“Query String Parameters”將參數傳遞給服務器。
例如,在下面的請求中,
1 |
https://postman-echo.com/get?param1=51zxw¶m2=66666 |
請求說明
- param1和param2表示發送的參數。
?
后面接參數&
連接多個參數
參數編輯
- 點擊Params按鈕,Postman 可以自動幫我們解析出對應參數。
- 如果想要暫時不傳參數,可以方便的通過不勾選的方式去實現
- 如果想要批量的編輯參數,可以點擊右上角的Bulk Edit,去實現批量編輯
響應數據
在主界面下方一欄菜單為響應菜單欄,可以查看響應內容,Cookie、Headers、響應狀態碼等信息。
返回值:
1 |
{ |
POST
HTTP POST請求方法旨在將數據傳輸到服務器,返回的數據取決於服務器的實現。
POST請求可以使用Query String Parameters
以及body
將參數傳遞給服務器。
案例1
在下面的請求中,使用Query String Parameters
傳遞參數。
1 |
https://postman-echo.com/post?param=51zxw |
返回值
1 |
{ |
案例2
發送一個Request,其中body為application/x-www-form-urlencoded
類型,參數分別為param1=zxw
和param2=888
請求URL如下:
1 |
https://postman-echo.com/post |
Postman Body數據類型說明:
-
form-data
multipart/form-data
是Web表單用於傳輸數據的默認編碼。這模擬了在網站上填寫表單並提交它。表單數據編輯器允許我們為數據設置鍵-值對。我們也可以為文件設置一個鍵,文件本身作為值進行設置。 -
x-www-form-urlencoded 該編碼與URL參數中使用的編碼相同。我們只需輸入鍵-值對,Postman會正確編碼鍵和值。請注意,我們無法通過此編碼模式上傳文件。表單數據和urlencoded之間可能存在一些差異,因此請務必首先檢查API的編碼實現,確定是否可以使用這種方式發送請求。
-
raw 請求可以包含任何內容。除了替換環境變量之外,Postman不觸碰在編輯器中輸入的字符串。無論你在編輯區輸入什么內容,都會隨請求一起發送到服務器。編輯器允許我們設置格式類型以及使用原始主體發送的正確請求頭。我們也可以手動設置
Content-Type
標題,這將覆蓋Postman定義的設置。 -
binary 二進制數據可讓我們發送Postman中無法輸入的內容,例如圖像,音頻或視頻文件。
返回值如下:
1 |
{ |
PUT
HTTP PUT請求主要是從客戶端向服務器傳送的數據取代指定的文檔的內容。
PUT請求可以使用Query String Parameters
以及body
請求體將參數傳遞給服務器。
案例:
發送PUT請求,並傳遞字符參數“hello 51zxw”
1 |
https://postman-echo.com/put |
返回值
1 |
{ |
DELETE
HTTP DELETE方法用於刪除服務器上的資源,DELETE請求可以使用Query String Parameters
以及body
請求體將參數傳遞給服務器。
delete請求
1 |
https://postman-echo.com/delete |
返回值
1 |
{ |
Request Header
Request Header(請求頭)用來說明服務器要使用的附加信息,比較重要的信息有 Cookie、Referer、User-Agent 等。在Postman中可以在請求下方的Headers欄目來設置,如下如圖所示:
Response Header
Response Header(響應頭)其中包含了服務器對請求的應答信息,如 Content-Type、Server、Set-Cookie 等,在Postman主界面下方Headers或者Postman Console界面都可以查看Response Header信息。
Tips:通過Postman Console可以看到每次請求的Request Header詳細信息,詳見視頻演示。
授權設置
很多時候,出於安全考慮我們的接口並不希望對外公開。這個時候就需要使用授權(Authorization)機制
授權過程驗證您是否具有訪問服務器所需數據的權限。
當您發送請求時,您通常必須包含參數,以確保請求具有訪問和返回所需數據的權限。
Postman提供授權類型,可以輕松地在Postman本地應用程序中處理身份驗證協議。
Postman支持的授權協議類型如下:
- No Auth
- Bearer Token
- Basic auth
- Digest Auth
- OAuth 1.0
- OAuth 2.0
- Hawk Authentication
- AWS Signature
- NTLM Authentication [Beta]
這里主要介紹以上加粗的授權協議的使用。
Basic auth
基本身份驗證是一種比較簡單的授權類型,需要經過驗證的用戶名和密碼才能訪問數據資源。這就需要我們輸入用戶名和對應的密碼。
案例:請求URL如下,授權賬號為:
- 用戶名:
postman
- 密碼:
password
- 授權協議為:
Basic auth
1 |
https://postman-echo.com/basic-auth |
-
如果不輸入用戶名密碼,直接使用GET請求,則會返回提示:Unauthorized
-
輸入用戶名密碼,選擇Basic auth授權類型,則返回如下結果:
1 |
{ |
Digest Auth
Digest auth 是一個簡單的認證機制,最初是為HTTP協議開發的,因此也常叫做HTTP摘要。其身份驗證機制非常簡單,它采用哈希加密方法,以避免用明文傳輸用戶的口令。摘要認證就是要核實參與通信的兩方都知道雙方共享的一個口令。
當server想要查證用戶的身份,它產生一個摘要盤問(digest challenge),並發送給用戶。典型的摘要盤問例如以下:
1 |
Digest realm="iptel.org", qop="auth,auth-int", |
這里包含了一組參數,也要發送給用戶。用戶使用這些參數,來產生正確的摘要回答,並發送給server。摘要盤問中的各個參數,其意義例如以下:
realm(領域):領域參數是強制的,在全部的盤問中都必須有。它是目的是鑒別SIP消息中的機密。在SIP實際應用中,它通常設置為SIP代理server所負責的域名。
nonce(現時):這是由server規定的數據字符串,在server每次產生一個摘要盤問時,這個參數都是不一樣的(與前面所產生的不會雷同)。“現時”一般是由一些數據通過md5雜湊運算構造的。
這種數據通常包含時間標識和server的機密短語。這確保每一個“現時”都有一個有限的生命期(也就是過了一些時間后會失效,並且以后再也不會使用),並且是獨一無二的
(即不論什么其他的server都不能產生一個同樣的“現時”)。
algorithm(算法):這是用來計算的算法。當前僅僅支持MD5算法。
qop(保護的質量)。這個參數規定server支持哪種保護方案。client能夠從列表中選擇一個。值auth
表示僅僅進行身份查驗, auth-int
表示進行查驗外,另一些完整性保護。須要看更具體的描寫敘述,請參閱RFC2617。
案例
請求URL如下
1 |
https://postman-echo.com/digest-auth |
摘牌配置信息如下:用戶名密碼和上面basic auth一樣
1 |
Digest username="postman", realm="Users", nonce="ni1LiL0O37PRRhofWdCLmwFsnEtH1lew", uri="/digest-auth", response="254679099562cf07df9b6f5d8d15db44", opaque="" |
執行請求結果如下:
1 |
{ |
Hawk Auth
Hawk Auth是一個HTTP認證方案,使用MAC(Message Authentication Code,消息認證碼算法)算法,它提供了對請求進行部分加密驗證的認證HTTP請求的方法。hawk方案要求提供一個共享對稱密匙在服務器與客戶端之間,通常這個共享的憑證在初始TLS(安全傳輸層協議)保護階段建立的,或者是從客戶端和服務器都可用的其他一些共享機密信息中獲得的。
案例
請求URL如下:
1 |
https://postman-echo.com/auth/hawk |
密鑰信息如下:
-
Hawk Auth ID: dh37fgj492je
-
Hawk Auth Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn
-
Algorithm: sha256
執行結果:
1 |
{ |
如果將key改為其他任意的字符則返回如下結果:
1 |
{ |
OAuth 1.0
OAuth(開放授權)是一個開放標准,允許用戶讓第三方應用訪問該用戶在某一網站上存儲的私密的資源(如照片,視頻,聯系人列表),而無需將用戶名和密碼提供給第三方應用。
擴展資料:
案例
請求URL如下:請求方式為GET,Add authorization data to
設置為:Request Headers
1 |
https://postman-echo.com/oauth1 |
參數配置為:
- Consumer Key: RKCGzna7bv9YD57c
- Consumer Secret: D+EdQ-gs$-%@2Nu7
發送請求結果如下:
1 |
{ |
如果Consumer Secret錯誤則返回如下結果:
1 |
{ |
擴展資料:各個授權協議文檔
Cookie設置
cookie是存儲在瀏覽器中的小片段信息,每次請求后都將其發送回服務器,以便在請求之間存儲有用的信息。比如很多網站登錄界面都有保留賬號密碼,以便下次登錄。
由於HTTP是一種無狀態的協議,服務器單從網絡連接上無從知道客戶身份。怎么辦呢?就給客戶端們頒發一個通行證吧,每人一個,無論誰訪問都必須攜帶自己通行證。這樣服務器就能從通行證上確認客戶身份了。這就是Cookie的工作原理。
Cookie是由服務端生成,存儲在響應頭中,返回給客戶端,客戶端會將cookie存儲下來,在客戶端發送請求時,user-agent會自動獲取本地存儲的cookie,將cookie信息存儲在請求頭中,並發送給服務端。postman也可以設置、獲取、刪除Cookie。
Set Cookies
在Send按鈕下方點擊Cookies
文字菜單,彈出如下界面,然后可以設置Cookie。
請求URL如下:請求方式為GET,添加Cookie值為username:51zxw
1 |
http://www.baidu.com/ |
打開Console找到Request Header可以看到自定義設置的Cookie內容。
Get Cookies
Cookie獲取比較簡單,直接獲取Response Headers里面的set-cookie值即可,或者在主界面下方Cookie菜單欄里面也可以查看。
Delete Cookies
點擊Cookies
文字菜單,然后可以根據需求去清除對應的Cookie。
變量
問題思考
在開發不同階段可能存在不同的環境,比如測試環境和生產環境。
測試環境API如下:
1 |
https://dev.postman.com/get |
生產環境API如下:
1 |
https://postman-echo.com/get |
在這么情況下,按照常規思路要么你需要維護兩套環境的API,要么每次都手動一個個去修改URL,不管哪種選擇都比較麻煩且低效,那么有沒有比較的好的方法來解決這個問題呢?
Postman變量類型
通過比較我們可以發現,以上兩組API主要是除了host不同之外其他都一樣,其實把Host用變量替換,這樣就可以靈活切換環境。
Postman提供了變量設置,有4種變量類型。
- 本地變量(LocalVariable )
- 全局變量(Global Variable)
- 環境變量(Environment Variable)
- 數據變量(Data Variable)
環境變量
環境變量指在不同環境,同一個變量值隨着環境不同而變化,比如我們上面舉例場景就可以使用環境變量,當在測試環境時,host值為: dev.postman.com ,當切換到生產環境時,host值變為:postman-echo.com 。
環境變量設置:
在postman界面點擊右上角眼睛圖標,即可開始設置環境變量和全局變量。環境變量設置過程如下圖所示:我們可以設置兩種環境 dev
和release
,dev
是開發測試環境; release
是正式的生產環境。host
環境變量,根據不同的環境值不一樣。
變量引用格式為,如下圖所示:
詳細過程見視頻演示。
本地變量
本地變量主要是針對單個URL請求設置的變量,作用域只是局限在請求范圍內。如請求URL如下,設置兩個本地變量(user,passwd)作為參數。請求方式為POST
1 |
https://postman-echo.com/post |
從上圖中我們可以看到變量設置的格式為
變量設置好之后需要賦值,在Pre-request-Script
里面編寫如下代碼:
1 |
pm.variables.set("user","51zxw"); |
點擊send執行之后的返回值如下,可以看到我們定義的變量已經發送。
1 |
{ |
全局變量
全局變量是指在所有的環境里面,變量值都是一樣的,全局變量的作用域是所有請求。
全局變量設置有兩種方式:
- 點擊界面里設置
- 在腳本里設置
界面設置
點擊眼睛圖標后,在Global
選項菜單點擊Edit
菜單即可設置全局變量,如下圖所示。全局變量的引用格式和環境變量一樣,
注意:當環境變量和全局變量名稱一樣時,切換到某個環境時,環境變量會覆蓋全局變量。
腳本設置
使用如下腳本可以設置全局變量:variable_key
表示變量名稱, variable_value
表示變量值。
1 |
pm.globals.set("variable_key", "variable_value"); |
實踐案例
在實際接口測試過程中,接口經常會有關聯。比如需要取上一個接口的某個返回值,然后作為參數傳遞到下一個接口作為參數。假設我們要獲取A接口返回的userid
值作為B接口的請求參數。
A接口請求URL如下:
1 |
|
- 請求方式為Post
- 請求參數:userid(這里自己定義,接口會返回對應的id值)
返回值
1 |
{ |
根據返回值我們需要從返回值中提取userid值。在Test
標簽欄下編寫如下腳本獲取userid
值
1 |
//獲取返回的響應值然后轉化為json格式 |
B接口請求URL如下:請求方式為GET
1 |
postman-echo.com/get?userid={{userid}} |
先執行A接口的,然后在執行B接口,此時B接口通過全局變量userid
可以獲得A接口的返回值。
數據變量
數據變量是通過導入外部數據文件(json文件或者csv文件),來獲取變量數據。我們可以創建一個如下內容的json文件:
data.json
1 |
[{ |
稍后我們會結合運行Collection來講解如何導入該數據文件。
斷言
簡介
一般來說執行完測試,我們需要對測試結果來進行校驗,判斷結果是是否符合我們的預期,也就是斷言。在接口測試中一般會根據響應狀態碼或者響應返回的數據來進行斷言。
Postman提供一個測試沙箱(Postman Sandbox) 測試沙箱是一個JavaScript執行環境,可以通過JS腳本來編寫pre-request Script和test Script。
- pre-request Script(預置腳本)可以用來修改一些默認參數,在請求發送之前執行。有點類似於unittest里面的setUp()方法。
- test Script(測試腳本)當接收到響應之后,再執行測試腳本。
案例
接口請求URL如下:請求方式為POST
1 |
postman-echo.com/post |
斷言規則
- 響應狀態碼:200
- 響應內容:返回的
user
參數值與定義的一致 - 響應時間:小於0.5s
測試腳本
在pre-request Script
定義變量user
1 |
pm.variables.set("user",'zxw'); |
在Test
欄下面編寫如下腳本
1 |
//判斷響應狀態碼 |
斷言結果
擴展資料:Postman測試腳本官方文檔
運行Collection
批量執行
當我們想批量測試某個集合里面的各個API時,可以使用Collection Runner來批量運行API,同時可以進行環境變量、迭代執行次數、延遲時間等設置。
執行結果
數據驅動
應用背景
有時我們針對一個接口需要測試很多不同的參數,如果每次一個個的去修改參數值來進行測試這樣效率肯定會比較低下。因此我們需要每次迭代執行傳入不同的參數進行測試,那么需要導入外部數據文件進行參數化,也就是所謂的數據驅動。
數據導入
如下圖所示,data選擇之前我們創建的json數據文件:data.json,文件類型選擇application/json
json數據內容如下:
1 |
[{ |
請求之前延遲時間最好設置為1000~3000,避免過於頻繁請求被禁。
點擊Preview
按鈕可以預覽導入的數據。
執行結果
構建工作流
問題思考
在使用“Collection Runner”的時候,集合中的請求執行順序就是請求在Collection中的顯示排列順序。但是,有的時候我們不希望請求按照這樣的方式去執行,可能是執行完第一個請求,再去執行第五個請求,然后再去執行第二個請求這樣的方式;那么在“Collection Runner”中如何去構建不同的執行順序呢?
設置方法
最直接的方法就是直接在集合里面拖動調整順序,但是每次去拖動也比較麻煩,特別是當請求比較多的時候。這個時候最高效的方法就是通過腳本設置。
首先下載官方提供的案例文件:collection.json 導入到postman,運行Collection結果如下圖所示:
接下來要調整執行順序為:Request1->Request3->Request2->Request4
首先在第一個請求:Request1中Test
添加如下代碼:表示下一個請求為執行請求名稱為Request3
的請求
1 |
postman.setNextRequest('Request 3') |
然后在Request3的請求中Test
添加如下代碼:表示下一個請求為執行請求名稱為Request2
的請求
1 |
postman.setNextRequest('Request 2') |
最后在Request2的請求中Test
添加如下代碼:表示下一個請求為執行請求名稱為Request4
的請求.
1 |
postman.setNextRequest('Request 4') |
注意:第一個執行請求的排序一定要在第一個。
執行結果
相關資料:collection runs官方文檔
命令執行
問題思考
在前面我們都是在postman圖形界面工具里面進行測試,但是有時候我們需要把測試腳本集成到CI平台,或者在非圖形界面的系統環境下測試,那么該如何處理呢?
Newman簡介
Newman是一款基於Node.js開發的可以運行Postman的工具,使用Newman,可以直接從命令行運行和測試Postman集合。
Newman應用
環境准備
- Node.js
- cnpm或npm
配置好環境后,執行如下命令安裝newman
1 |
cnpm install newman --global |
輸入如下面命令檢測安裝是否成功
1 |
C:\Users\Shuqing>newman -v |
執行測試
首先將postman的集合導出,如下圖所示:
在桌面新建文件夾pmtest
,將導出的postman文件和相關數據文件放入。
打開cmd進入到pmtest
目錄,輸入如下命令:
1 |
newman run Postman_API.postman_collection.json -d data.json -r html |
命令說明
run
代表要執行的postman腳本,即為導出的集合。-d
表示要執行的數據,也就是之前導入postman的數據-r
生成的測試報告類型,這里生成html格式報告
更多命令用法請輸入newman -h
即可查看。
報告查看
在測試文件夾pmtest
里面可以看到生成的一個newman
文件夾,打開就可以看到生成的測試報告。
Html報告樣式:newman-run-report
newman不僅支持生成html報告,還支持其他報告類型:
- JSON reporter
- JUNIT/XML reporter
- Client report
- Html report
集成Jenkins
Jenkins簡介
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重復的工作,旨在提供一個開放易用的軟件平台,使軟件的持續集成變成可能。
下載與安裝
下載地址:https://jenkins.io/download/
下載后安裝到指定的路徑即可,默認啟動頁面為localhots:8080
,如果8080
端口被占用無法打開,可以進入到jenkins安裝目錄,找到jenkins.xml
配置文件打開,修改如下代碼的端口號即可。
1 |
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments> |
集成步驟
集成到jenkins的思路其實很簡單,就把之前我們執行測試的cmd命令放到jenkins里面去執行。集成步驟也很簡單:
- 首先新建一個項目:
postman_api_test
- 然后在構建欄目下拉菜單選擇
Execute Windows batch command
1 |
c: |
Tips:我的jenkins安裝在D盤因此需要使用命令 c:
切換到postman腳本所在盤符。
最后執行結果如下:
導出不同語言腳本
問題思考
雖然Postman功能比較強大,但是畢竟是一款商業工具,多少會有一些限制。比如只支持js腳本運行,如果我們想用自己熟悉的編程語言(如:Python,java等)來做接口自動化測試該如何處理?
操作步驟
Postman支持導出不同語言版本的腳本,當一個接口調試好之后,點擊右側的code
字樣即彈出如下界面可以選擇語言。最后選擇你需要語言版本即可生成對應的代碼。
生成的代碼片段可以點擊 Copy to Clipboard
復制。
參考資料
- https://docs.postman-echo.com/#1eb1cf9d-2be7-4060-f554-73cd13940174
- https://www.jellythink.com/archives/169
- https://blog.csdn.net/wangyuquanliuli/article/details/24850761
- https://www.cnblogs.com/happy-today/p/7928822.html
- http://www.mamicode.com/info-detail-1693734.html
- https://blog.csdn.net/qq_14908027/article/details/77923792