Postman教程大全
推薦一款接口測試工具!POSTMAN!?簡單來說,四個詞,簡單實用大方美觀!
Postman是一款功能強大的網頁調試與發送網頁HTTP請求的Chrome插件
Postman背景介紹
用戶在開發或者調試網絡程序或者是網頁B/S模式的程序的時候是需要一些方法來跟蹤網頁請求的,用戶可以使用一些網絡的監視工具比如著名的Firebug等網頁調試工具。今天給大家介紹的這款網頁調試工具不僅可以調試簡單的css、html、腳本等簡單的網頁基本信息,它還可以發送幾乎所有類型的HTTP請求!Postman在發送網絡HTTP請求方面可以說是Chrome插件類產品中的代表產品之一。
Postman的操作環境
postman適用于不同的操作系統,Postman Mac、Windows X32、Windows X64、Linux系統,還支持postman 瀏覽器擴展程序、postman chrome應用程序等。
Postman重要提示:
由于2018年初chrome停止對chrome應用程序的支持,你的postman插件可能無法正常使用了。目前chrome應用商店能使用的就是chrome擴展程序和主題背景。
在這里建議大家直接下載它的應用程序進行使用
貼上官網下載地址:Postman | Download Postman App
記得選擇下載的版本
這里我選擇的是windows64位系統
下載完成后雙擊安裝吧,安裝過程極其簡單,無需任何操作
?
ok!
成功進入postman頁面后,接下來我們正式進行postman的系統教程吧
設置postman主題
右上角的設置里可以設置postman的主題
這里,出于個人習慣,我把它設置成了黑色
postman基礎功能介紹
首先,看一下它的基礎功能:
collection在postman里面相當于一個文件夾,可以把同一個項目的請求放在一個Collection里方便管理和分享,Collection里面也可以再建文件夾。這里我們做一個普通接口的簡單的示例:
新建一個文件夾
創建一個文件集
新建一個請求
給這接口明明為查詢上海天氣并保存
點擊該請求,現在是空白的
輸入一個get請求,params里會自動顯示參數
該請求是聚合數據提供的一個查詢天氣的接口,大概還有幾百次的次數可以用:
http://v.juhe.cn/weather/index?format=2&cityname=南京&key=64aa04d276d1ed4fd5a147d97e16b87e
點擊send,查詢成功
成功查詢到上海天氣
這樣就完成了一次簡單的天氣查詢接口的請求
?
請求區域介紹
1?? ??Authorization:身份驗證,主要用來填寫用戶名密碼,以及一些驗簽字段,postman有一個helpers可以幫助我們簡化一些重復和復雜的任務。當前的一套helpers可以幫助你解決一些authentication protocols的問題。;
2? ??Headers:請求的頭部信息
3? ??Body:post請求時必須要帶的參數,里面放一些key-value鍵值對
4? ??Pre-requerst Script:可以讓你在 請求之前自定義請求數據,這個運行在請求之前,語法使用JavaScript語句。
5? ??tests:tests標簽功能比較強大,通常用來寫測試,它是運行在請求之后。支持JavaScript語法。postman每次執行request的時候,會執行tests。測試結果會在tests的tab上面顯示一個通過的數量以及對錯情況。這個后面會進行詳解,它也可以用來設計用例,比如要測試返回結果是否含有某一字符串
6? ??form-data:,它將表單數據處理為一條消息,以標簽為單元,用分隔符分開。既可以單獨上傳鍵值對,也可以直接上傳文件(當上傳字段是文件時,會有Content-Type來說明文件類型,但該文件不會作為歷史保存,只能在每次需要發送請求的時候,重新添加文件。);post請求里較常用的一種
上傳文件
7? ??x-www-form-urlencoded:對應信息頭-application/x-www-from-urlencoded,會將表單內的數據轉換為鍵值對;
8? ??raw:可以上傳任意類型的文本,比如text、json、xml等,所有填寫的text都會隨著請求發送;
9? ??binary:對應信息頭-Content-Type:application/octet-stream,只能上傳二進制文件,且沒有鍵值對,一次只能上傳一個文件,?也不能保存歷史,每次選擇文件,提交;
導出和導入接口集:
postman支持非常方便的導入和導出接口集,繼續操作如下:
導出
數據一般以postman_collection.json結尾
?
導入:
為了區分,我把他們名稱改了
ok,這樣就是簡單的導入導出collection集合
?
關于設置環境變量:
?
1. Global---全局
2. Enviroment --- 環境變量
3. Local --- 局部
4. Data ---- 數據
優先級從高到底 Data ---- > Local ---- > Enviroment ---- > Global
?
postman支持很方便的設置環境變量以及全局變量,并可以一鍵切換不同環境
1:可以一鍵切換環境,選擇No Environment則不使用環境變量,僅適用全局變量
2:可以查看當前環境中的變量和全局變量(Globals)的值
3.進入設置頁面
如新建一套環境dome
選擇我們剛才創建的環境,點擊眼睛可以看到我們設置的變量值
創建環境變量能夠很方便的調取我們所需的數據
?
將返回值的某個數據設置為環境變量
在某些時候,我們需要獲取到一個變量,并保存下來,因為在后面我們會使用到。比如token,sign等信息
這時候就需要用到tests區域了,使用其強大的js語法
下面是一個簡單的將返回值的某個數據設置為環境變量或者全局變量的介紹:
?
定義一個xxx,獲取body中返回的所有參數,并轉化為JSON格式 var xxx = JSON.parse(responseBody);
//把json字符串轉化為對象。parse()會進行json格式的檢查是一個安全的函數, 如:檢查json中某個數組元素的個數(這里檢測programs的長度)
var data = JSON.parse(responseBody);tests["program's lenght"] = data.programs.length === 5;
?
將返回中的值設置為一個環境變量 pm.environment.set("key",xxx.data.value);或者postman.setEnvironmentVariable("key", "value");
將返回中的值設置為一個全局變量,? ? ? ? pm.globals.set("key",xxx.data.value);或者postman.setGlobalVariable("key", "value");
//注意:Global后面不能加S,value值一定要指定到某個具體節點
?
實際操作一下:
一個微信登錄的接口token值獲取
這是一個微信登錄的接口,屬于post方法,里面的必須參數是unionid,這里我已經把unionid填在body里了,點擊send下面可以得到一個token
該登錄token每次請求的值都是不一樣的,屬于一個動態值。而后面我們的所有接口請求都需要這個token,現在就可以使用tests將它放置在環境變量里
var acquiretoken = JSON.parse(responseBody);
//定義一個acquiretoken方法(獲取token),把responseBody轉為json字符串
pm.environment.set("token",acquiretoken.data.token);
//將token變量放置到當前環境變量里去
?
再次執行send后,點擊右上角小眼睛
發現變量就儲存在了dome的環境變量里,每次點擊send進行請求,發現環境變量里token都會隨著結果變化而變化。
同理,全局變量統一可以這樣設置
在設置過變量后,調用變量的時候,在postman里也比較方便,直接使用{{變量名}}就可以了,
加入我們在body里需要一個token值,那么我們可以直接在引用在環境變量里儲存的token,例如:
引用變量的時候會有一定的提示
變顏色代表引入變量成功
上面的效果和下面這種把一點點輸入的的效果是一樣的!
其他的常用tests方法:
在postman里,內置了一些常用的方法:
可以很方便的調用
下面我也整理了一些常用的tests方法,分享給大家
?
測試response Headers中的某個元素是否存在 tests["元素Content-Type是否存在"] = postman.getResponseHeader("Content-Type");
//getResponseHeader()方法會返回header的值;
?
定義一個xxx,獲取headers值 var.xxx = postman.getResponseHeader("key");
將Headers中的值設置為一個環境變量 postman.setEnvironmentVariable("key",xxx);或者pm.environment.set("key",xxx);
?
檢查response的code值是否為200 tests["Status code is 200"] = responseCode.code === 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。
?
檢查response的body中是否包含字符串 tests["Body matches string"] = responseBody.has("type");
// tests["Body matches string"]中的tests是一個內置對象,
tests["Body matches string"]是指為這個斷言起個名稱叫”Body matches string”,這個名稱可以自行修改。
這句代碼的意思是:名稱為”Body matches string”的斷言中判斷響應正文中是否包含:type這個字段。type無論是key或者value,只要匹配就可以。多個類型可用“,”分割。
?
檢查Response Body是否等于字符串 tests["測試點"] = responseBody === "Response Body返回的內容";
//這個可以用在接口返回內容為純字符串時,直接檢查整個返回結果的正確性
?
檢查Response time 是否小于200ms tests["Response time 小于200毫秒"] = responseTime < 200;
?
檢查Response time 是否大于200ms tests["Response time 大于200毫秒"] = responseTime > 200;
?
postman.setNextRequest('Request 4')
// postman.setNextRequest()是一個帶有一個參數的函數,它是接下來要運行的請求的名稱或ID。往往用來跳轉至某個接口,只在運行該集合時有用,單獨運行無效
?
?var jsonObject = xml2Json(responseBody);
//轉換XML body為JSON對象
?
設置一個隨機數變量 pm.globals.set("type",parseInt(4*Math.random())+1);
//針對不同類型的課程類型,設置一個1到4的隨機整數,字段名是type,parselnt 是強制轉換為整數
?
校驗接口返回是否有數據 tests["獲取第一個結果"] = xxx.content.jieguo[0];
//我的程序設置的是如果當前沒有數據,則只返回content[],所以這句斷言可以校驗,如果content里還有數據,則視為返回不為空
?
使用postman進行接口自動化測試
沒錯,使用postman也可以進行接口自動化的,是不是很神奇
首先,既然是自動化測試,那么我們肯定需要工具 (Postman) 或者代碼能幫我們直接判斷結果是否符合預期。那么在接口測試上,大體就兩個思路:
判斷請求返回的 code 是否符合預期
判斷請求返回的內容中是否包含預期的內容(關鍵字)
接下來我們看看如何利用 Postman 來解決上述的問題
--------------------
?
這是三個模擬天氣的接口集合,點擊擴展按鈕,找到RUN,進入
這里我們先簡單運行一次:
發現,運行成功。里面我每個接口都寫了兩個tests進行校驗字段,所以上面一共有6條tests測試點被測試到,并且是成功的
每個接口里的tests數據如下:
當然,如果想要每次運行不一樣的數據,我們需要其他的方法,比如,使用pre-requestScprit功能,導入或者生成隨機數據進行測試,這個后續我再進行講解
作者:依北辰
鏈接:https://www.jianshu.com/p/97ba64888894
總結
以上是生活随笔為你收集整理的Postman教程大全的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软官方工具MediaCreationT
- 下一篇: OpenCV3源代码目录解析(算法模块解