Postman背景介紹
用戶在開發或者調試網絡程序或者是網頁B/S模式的程序的時候是需要一些方法來跟蹤網頁請求的,用戶可以使用一些網絡的監視工具比如著名的Firebug等網頁調試工具。今天給大家介紹的這款網頁調試工具不僅可以調試簡單的css、html、腳本等簡單的網頁基本信息,它還可以發送幾乎所有類型的HTTP請求!Postman在發送網絡HTTP請求方面可以說是Chrome插件類產品中的代表產品之一。
Postman的操作環境
postman適用於不同的操作系統,Postman Mac、Windows X32、Windows X64、Linux系統,還支持postman 瀏覽器擴展程序、postman chrome應用程序等。
我們推薦使用Postman Native APP,但Postman也可以作為Chrome應用程序。 以前,Postman Chrome應用程序的用戶必須下載Postman Interceptor Chrome擴展程序才能在桌面瀏覽器中管理Cookie和捕獲請求。詳細了解為什么支持Postman Chrome應用程序已被棄用。
Postman Chrome應用程序只能在Chrome瀏覽器上運行。 要使用Postman Chrome應用,您首先需要安裝Google Chrome。如果您已安裝Chrome,請轉到Chrome網上應用店的postman頁面,然后點擊“添加到Chrome”。下載應該需要幾分鍾,這取決於您的網絡連接。 一旦你下載了應用程序,你可以啟動postman。如果你選擇在Google應用中使用Postman,一定要先下Postman再下載Postman interceptor
Postman的基礎功能
接口請求流程
GET請求
GET請求:點擊Params,輸入參數及value,可輸入多個,即時顯示在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提交示例:

上圖中,當我們選擇了JSON(application/json)時,postman同樣幫我們自動設置了Content-Type,可以自行的去查看Headers.
post請求三:xml提交
先看下圖XML提交示例:

上圖中,當我們選擇了XML(text/xml)時,postman同樣幫我們自動設置了Content-Type,可以自行的去查看Headers.
post請求四:自行設置Content-Type
HTTP的POST請求的參數,都是放在請求正文中的,只是根據Content-Type來判斷請求正文的格式,那么我們同樣可以在表單提交時,選擇raw,然后自行設置Content-Type為application/x-www-form-urlencoded。


post請求五:二進制文件提交
先看下圖二進制文件示例:

Body下,選擇binary,在這里你可以發送視頻、音頻、文本等文件。
postman斷言
一個完整的接口測試,包括:請求->獲取響應正文->斷言,我們已經知道了請求與獲取響應正文,下面來介紹如何用postman進行斷言。

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

舉例說明:首先設置一個斷言場景,根據斷言場景來舉例說明Postman斷言如何使用。
1、判斷HTTP返回狀態碼為200
2、判斷響應正文中是否包含:"statusCode":200
3、解析響應正文,並判斷statusCode的值是200,message的值是”Success”
第一步:在SNIPPETS中,往下拉,有一項”Status code:Code is 200”,這個就是為場景中的第 1 條准備的,判斷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屬性值(HTTP狀態碼)是否為200。
第二步:同樣在SNIPPETS中,找到一項”Response body:Contains string”,這個就是為場景中的第2條准備的,判斷響應正文中的字段。點擊后,在其左邊,斷言代碼自動添加,見下圖:

其中我們需要修改想要在響應報文中找到的內容:
tests["Body matches string"] = responseBody.has('"statusCode":200'); //對照第2條場景:判斷響應正文中是否包含:"statusCode":200

第三步:我們需要解析JSON串了,所以,在SNIPPETS中找到”Response body:JSON value check”並點擊,在其左邊,斷言代碼自動添加,見下圖:

我們可以看出,這里面其實是JS代碼,jsonData變量其實是解析完JSON后的對象,在JS中,一個JSON對象獲取其屬性的值,直接是用jsonData.value,於是,我們把代碼給修改一下,來判斷第3條場景:
tests["response statusCode"] = jsonData.statusCode === 200; //判斷statusCode的值是200
tests["response message"] = jsonData.message === 'Success'; //判斷message的值是”Success”

這樣一來,我們可以看到一共有Tests的斷言4個,點擊Send,發送請求,在響應區內可以看到如下圖:表示斷言全部通過。

以上,SNIPPETS中還有很多的函數提供給我們,努力學習吧~~~
管理用例---Collections
Collections集合:也就是將多個接口請求可以放在一起,並管理起來。什么樣的接口請求可以放在同一個collection里?
在這里告訴大家可以這樣:一個工程一個Collection,這樣方便查找及統一處理數據。

第一步:創建Collections
點擊上圖中的帶+號的圖標,輸入Name:”demo”,Description:”demo for Collections”,點擊Create按鈕即創建成功一個Collections.

第二步,在Collections里添加請求
在右側准備好接口請求的所有數據,並驗證后,點擊save按鈕。

選擇Collection及填寫好Request name、Request description后,點擊右下角的save to collection按鈕,則該請求被添加到Collection中。

添加成功后,可在左側列表中,collection中查看剛剛添加的請求。

第三步:Collection精細化---Folder
隨着放入Collection的請求越來越多,混亂就又出現了,在找一個請求時,要找半天,於是將collection中的請求分門類別就很重要了,於是,在collection中就可以添加Folder了,將相同場景的請求放入同一個Folder中,於是就實現了模塊化的管理了。
點擊下圖中的Add Folder后,即可創建Folder。

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

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

第四步:運行Collection
將工程模塊化的用例管理起來后,借着這個管理起來的東風,也可以將工程模塊化的用例執行起來,即一次執行一整個collection里的用例,或者執行一個collection里的某一個Folder里的用例。
點擊下圖中的Run:

下圖中的”Choose collection or folder”,如果選擇demo,表示運行demo這一整個collection的用例,如果選擇GET,即只運行demo下的GET模塊下的用例。
Environment,即運行環境,是開發環境還是測試環境,需事先配置,大家可以下去自已嘗試一下。
Iterations,即重復運行次數。會將選擇好的collection中folder重復運行。
Delay,間隔時間。用例與用例間的間隔時間。
Data,外部數據加載,即用例的參數化,可以與Iterations結合起來用,實現參數化,也就是數據驅動。
Run Demo,點擊運行,運行完成后,即可得出一個簡易的聚合報告。

第五步: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’]來獲取對應的值。
設置環境變量
有時需要在不同的環境下跑相同的測試,此時可以通過設置環境變量來動態選擇。點擊右上角的設置按鈕-Manage Environments:

填寫該環境的名稱:如測試環境,並在key和value中填寫需要的鍵值。


使用這些鍵值的時候只需要加上兩個花括號引用key,例如: {{url_base}}/admin/offer/

建立多個環境時,key通常都是相同的,只是value不同。創建好所有環境后,在跑用例的時候在右上角下拉列表選擇需要的環境就可以了。

身份驗證Authentication
顯示browser cookies,需要開啟Interceptor。點擊右上角的Interceptor 進行安裝,並開啟:

身份驗證Authentication:
postman有一個helpers可以幫助我們簡化一些重復和復雜的任務。當前的一套helpers可以幫助你解決一些authentication protocols的問題。

Basic Auth
填寫用戶名和密碼,點擊update request后,headers中自動添加Authorization。圖中用戶名和密碼均使用的key變量:

Digest Auth
要比Basic Auth復雜的多。使用當前填寫的值生成authorization header。所以在生成header之前要確保設置的正確性。如果當前的header已經存在,postman會移除之前的header。
OAuth 1.0
postman的OAuth helper讓你簽署支持OAuth
1.0基於身份驗證的請求。OAuth不用獲取access token,你需要去API提供者獲取的。OAuth 1.0可以在header或者查詢參數中設置value。
OAuth 2.0
postman支持獲得OAuth 2.0 token並添加到requests中。
postman竟然如此之強大!我們還有什么理由去拒絕?介紹完之后,可能新的問題又來了,如何與jenkins結合實現持續集成?
所以,產生了個newman,是個命令行運行postman請求的工具,建議大家自行去研究下,因為那確實就只是個命令行的工具而已!