Postman快速入門


    Postman是一款非常流行的支持HTTP/HTTPS協議的接口調試與測試工具,其功能非常強大,易用。

1 基礎知識

1.1 下載與安裝

    Postman的安裝步驟,本例以Windows為例,如下所示:

  • 1、訪問官網,下載Postman,官網地址如下所示:

https://www.postman.com/

  • 2、進入到主頁面后,下載適合自己的操作系統的版本,如下所示:

0101下載Postman.png

直接下載Postman的地址:https://www.postman.com/downloads/

  • 3、雙擊下載之后的安裝包,進入安裝界面,按安裝向導完成即可。

  • 4、點擊桌面快捷方式,注冊、登錄或者直接使用即可,跳過登錄直接使用如下所示:

0102跳過登錄直接使用.png

這里推薦注冊,在注冊並登錄后,Postman會將相應的數據上傳至遠程服務器,后面在其他地方登錄后,可以自動同步之前的數據。

1.2 界面導航說明

    初次使用Postman可能對界面上一些菜單、導航不太熟悉,可查看下圖的說明。

0201Postman主頁面界面介紹.png

1.3 第一個示例

    Postman發送請求非常簡章,我們以最簡單的GET請求為例,操作步驟如下所示:

  • 1.打開Postman,點擊左邊Collections,再點擊右邊的+,新建一個Collections;

0202新建Collection.png

  • 2.在上一步新建的Collection上右鍵選擇Rename輸入新名字,按Enter鍵即可。

0203重命名Collections.png

  • 3、在Postman填寫好相應的內容,點擊Send即可:

請求方法:選擇GET
請求地址中輸入:http://httpbin.org/get
Params中輸入參數zq和lyl

    以下輸入如下圖所示:

0204第一個請求.png

2 基礎功能

2.1 常見HTTP接口類型

    在HTTP中常見的接口主要有以下幾種類型

  • 帶查詢參數的接口
  • 表單類型的接口

2.1.1 帶查詢參數的接口

    帶查詢參數的接口通常為GET方法,在URL地址中通過?進行分隔,多個參數使用&進行連接,常見表現形式為param=value。示例如下所示:

http://httpbin.org/get?zq=diana&lyl=surpass

    以上為GET方法請求的完整URL地址,可拆分為如下所示:

2.1.2 表單類型的接口

    表單類型的接口通常為POST方法,常見的提交數據方式有以下幾種方式:

  • application/x-www-form-urlencoded
  • multipart/form-data
  • application/json
  • text/xml
2.1.2.1 application/x-www-form-urlencoded

    這是最常見的POST提交數據的方式。在POST提交數據中Content-Type被指定為application/x-www-form-urlencoded,提交的數據按照 key1=value1&key2=value2 的方式進行編碼,其中key和value都會進行URL轉碼

2.1.2.2 multipart/form-data

    這是另外一個常見的POST提交數據的方式。一般這種方式用於上傳文件

2.1.2.3 application/json

    application/json這是目前用得最多的數據提交方式,做為請求時,用來告訴服務器數據是序列化化的JSON數據。

2.1.2.4 text/xml

    text/xml是一種使用HTTP作為傳輸協議,XML作為編碼方式的遠程調用規范,它的使用也很廣泛,能很好的支持已有的 XML-RPC 服務。不過,XML 結構還是過於臃腫,一般場景用 JSON 會更靈活方便

2.1.3 Postman實現示例

2.1.3.1 帶查詢參數的接口

    可參考前面的第一個示例,結果如下所示:

0205PostURLencode.png

2.1.3.2 application/x-www-form-urlencoded

    操作步驟如下所示:

  • 1.新建一個請求
  • 2.請求方法為POST
  • 3.輸入請求地址:
http://httpbin.org/post
  • 4.切換至Body,編碼類型選擇x-www-form-urlencoded
  • 5.填寫相應的參數
username:diana
password:surpass
code:loveyou
  • 6.點擊Send

0205PostURLencode.png

2.1.3.3 multipart/form-data

    multipart/form-data一般常用於上傳文件,比如更新用戶頭像、License授權等,操作步驟如下所示:

  • 1.新建一個請求
  • 2.請求方法為POST
  • 3.輸入請求地址:
http://httpbin.org/post
  • 4.切換至Body,編碼類型選擇form-data
  • 5.在key中填入參數file,移動鼠標至其他地方
  • 6、再次移動鼠標至參數file后面,設置參數類型為File

0206設置參數類型為File.png

  • 7.在value點擊Select Files

0207選擇文件.png

  • 8.點擊Send

0208PostMutiFormData.png

上傳文件中的key(該示例為file)需要根據實際接口地址進行替換,該例僅為演示

2.1.3.4 application/json

    這是接口最常見一種的數據類型,操作步驟如下所示:

  • 1.新建一個請求
  • 2.請求方法為POST
  • 3.輸入請求地址:
http://httpbin.org/post
  • 4.切換至Headers,輸入Conten-Type

0209設置Contet-Type為Json.png

  • 5.切換至Body,編碼類型選擇raw,輸入以下數據
{
    "username": "diana",
    "password": "surpass",
    "code": "loveyou"
}
  • 6.點擊Send

0210JSON請求響應.png

2.1.3.5 text/xml
  • 1.新建一個請求
  • 2.請求方法為POST
  • 3.輸入請求地址:
http://httpbin.org/post
  • 4.切換至Headers,輸入Conten-Type

0211設置Contet-Type為xml.png

  • 5.切換至Body,編碼類型選擇raw,輸入以下數據
<?xml version="1.0" encoding="UTF-8" ?>
<userinfo>
    <username>diana</username>
    <password>surpass</password>
    <code>loveyo</code>
</userinfo>
  • 6.點擊Send

0212XML請求響應.png

2.2 接口響應數據解析

    響應數據是在發送請求后經過服務器處理后返回的結果,通過由三部分組成,分別是狀態行、響應頭、響應體。在Postman的展示如下所示:

0213Postman響應數據解析.png

    在Postman中的響應數據中,對接口測試的主要參考如下所示:

  • Body和Status是重點,可以用來驗證響應數據和響應狀態碼
  • Test Result用來我們編寫的斷言執行結果
  • Time和Size可用作性能測試的簡單判斷條件

    Body的顯示主題,常用的是Pretty、Raw、Preview

  • Pretty:直譯是美化,如果選中該標簽,則意味着返回的數據Postman會自動進行格式化處理,使數據看起來更加美觀。若返回的數據是json格式,則格式化為json再進行展示
  • Raw:即返回的數據,不做任何美化處理,直接顯示最原始的數據。
  • Priview:直譯為預覽,一般常用於返回為HTML的響應中,可以直接顯示為網頁形式,示例如下所示:

0214ResponsePreview.png

2.3 接口管理

2.3.1 接口管理功能

    當我們對一個或多個系統中的接口用例進行維護時,需要進行分類管理,方便后期維護或批量做回歸測試。在Postman提供該功能為Collections,通過Collections可以實現以下功能:

  • 用例分類管理
  • 批量回歸測試用例

    假設一個系統按模塊划分有以下幾個模塊和接口,如下所示:

--用戶模塊
  |--用戶新增接口
  |--用戶刪除接口
  |--用戶修改密碼接口
  |--用戶查詢接口
--訂單模塊
  |--訂單管理
    |--訂單查詢接口
    |--訂單刪除接口
  |--訂單跟蹤
    |--訂單物流信息查詢

    我們按以上結構進行創建Collections,操作步驟如下所示:

  • 1.點擊左邊Collection選項卡,再點擊+,如下所示:

0215創建Collections.png

  • 2.在創建的Collections右鍵,在彈出的菜單中選擇Rename,輸入新的名稱CollectionSample即可

0216RenameCollection.png

  • 3.創建子模塊,在CollectionSample右鍵,在彈出的菜單中選擇Add Folder,再次在剛新創建的子模塊中右鍵,在彈出的菜單中選擇Rename,輸入新的名稱用戶模塊即可,如下所示:

0217CreateAndRnameSubFolder.png

  • 4.創建請求,在子模塊用戶模塊右鍵,在彈出的菜單中選擇Add Request,再次在剛新創建的請求右鍵,在彈出的菜單中選擇Rename,輸入新的名稱用戶模塊即可,如下所示:

0218CreateAndRenameRequest.png

  • 5.重復上面步驟,依次創建各模塊和相應的接口請求,最終效果如下所示:

0219Collections示例.png

2.3.2 批量執行接口

    有一些時間,想單獨執行系統中某一模塊的全部接口用例,該如何操作呢?Postman提供了批量執行接口用例的功能,對應於Run,操作步驟如下所示:

  • 1.選中一個需要批量執行的Collections,在菜單中選擇Run,如下所示:

0220MutiExecAPITestCase.png

  • 2.在彈出的窗口中勾選需要運行的接口用例,並設置對應的參數,點擊Run CollectionSample即可

Iterations:代表需要執行的次數
Delay:在執行完一個接口后的休眠時間
Data:從文件中讀取並替換參數化變量

0221RunCollections.png

  • 3.在等待運行完成,可以查看相應的結果
    All Tests:所有運行的測試接口用例
    Passed:斷言通過的接口用例
    Failed:斷言失敗的接口用例

0222RunResults.png

2.3.3 日志調試

    在接口測試時,會因為代碼有問題導致報錯,這時則可以利用Postman的日志調試功能實現快速定位問題。
    在Postman中編寫日志打印的語句是使用JavaScript,可以在Pre-request Script和Tests中編寫。
    在Postman中默認Console是隱藏的可以通過以下兩種方式開啟

  • 菜單欄View->Show Postman Console
  • 點擊左下角的Console

0223ConsoleFunction.png

搜索日志:輸入URL或日志關鍵字即可搜索出對應的請求和日志記錄
日志級別:可以按日志級別進行快速查詢,日志級別有:All logs、Log、Info、Warning、Error
查看原始日志:提供格式化后的請求日志和原生日志,可以進行切換
Show timestamps:是否顯示時間戳
Hides network:隱藏接口請求,僅顯示日志

2.3.4 斷言

    如果沒有斷言,就需要人工去判斷返回的結果是否正確,而有了斷言之后,就為接口自動化提供一個基礎條件,相應Postman也提供對應的斷言功能,在Postman中的斷言有以下幾個特點:

  • 斷言編寫位置:Tests選項卡
  • 斷言編寫語言:JavaScript
  • 斷言執行順序:在響應數據返回后執行
  • 斷言結果查看:Test Results

JavaScript如果不會怎么辦?Postman非常貼心的提供了一些常用的內置斷言,從右側點擊對應的斷言,就可以在左邊Tests標簽中生成斷言代碼片斷。

0224內置斷言.png

    常用斷言代碼,按響應又可以分為狀態碼、響應頭、響應體

  • 斷言狀態碼:Status code: code is 200
pm.test("Status code is 200", function () {
    // 響應的狀態碼為200
    pm.response.to.have.status(200);
});
  • 斷言狀態消息:Status code:code name has string
pm.test("Status code name has string", function () {
    // 響應的狀態消息包含的字符OK
    pm.response.to.have.status("OK");
});
  • 成功的POST請求狀態碼:Successful POST request
pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([200, 201, 202]);
});
  • 斷言響應頭中包含:Response headers:Content-Type header check
pm.test("Content-Type is present", function () {
   //斷言響應頭存在Content-Type
    pm.response.to.have.header("Content-Type");
});
  • 斷言響應體中包含字符串:Response body:Contains string
pm.test("Body matches string", function () {
    // 響應數據中包含字符串loveyou
    pm.expect(pm.response.text()).to.include("loveyou");
});
  • 斷言響應體等於字符串:Response body : is equal to a string
pm.test("Body is correct", function () {
    // 響應數據等於字符串loveyou
    pm.response.to.have.body("loveyou");
});
  • 斷言響應體(json)中某個鍵名對應的值:Response body : JSON value check

    響應的數據如下所示:

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "code": "loveyou",
        "password": "surpass",
        "username": "diana"
    },
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Content-Length": "392",
        "Content-Type": "multipart/form-data; boundary=--------------------------885313293587233892669712",
        "Host": "httpbin.org",
        "Postman-Token": "9d61a0e9-d938-4263-90fb-b2acb696e700",
        "User-Agent": "PostmanRuntime/7.28.4",
        "X-Amzn-Trace-Id": "Root=1-6159c71c-65ecce4342403def289304d9"
    },
    "json": null,
    "origin": "183.192.232.183",
    "url": "http://httpbin.org/post"
}

    斷言代碼如下所示:

pm.test("Your test name", function () {
    // 獲取響應Json數據
    var jsonData = pm.response.json();
    // 獲取jsonData鍵名為form的子鍵名為username的值為diana,然后再與期望的值進行對比
    pm.expect(jsonData.form.username).to.eql("diana");
});
  • 響應時間:Response time is less than 1000ms
pm.test("Response time is less than 1000ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(1000);
});

一般用於簡單的性能測試參考指標

2.3.5 變量

    變量可以腳本中存儲和重復使用,通過設置變量,可以在集合、環境或請求中引用。在Postman中常用的變量有以下全局變量、環境變量、集合變量。

  • 全局變量:一旦申明,則全局有效,即在Postman中的任何集合中都可以使用該變量,作用域最大
  • 環境變量:要申明環境變量,先要創建環境,然后在該環境中創建變量。如果要想使用環境變量,必須先導入這個環境,這樣才可以使用這個環境下的變量了。環境可以創建多個,每個環境下又可以有多個變量。
  • 集合變量:集合變量是針對集合的,即申明的變量只能用於某個集合,使用范圍也僅限於該集合之內。

    以上三種變量的范圍從大到小依次為全局變量 > 集合變量 > 環境變量,如果要想使用變量,則需要進行兩步操作定義變量 、訪問變量

2.3.5.1 定義變量

    定義全局變量和環境變量,點擊Postman右上角眼睛圖標,在彈出的界面就可以根據需要定義全局變量和環境變量。

  • 定義全局變量

    操作步驟如下所示:
1.點擊Postman右上角眼睛圖標
2.在彈出的界面中,點擊Globals后面的Add
3.在上面第2步彈出的界面填寫全局變量名稱及其相應的值,最后點擊Save,保存全局變量
    以上操作步驟如下所示:

0225添加全局變量步驟.png

  • 定義環境變量

    操作步驟如下所示:
1.在Postman左側點擊Environments,再點擊左上角+
2.在彈出的界面中輸入環境名稱,並添加對應的環境變量
3.點擊Save,保存環境變量

    以上操作步驟如下所示:

0226添加環境變量步驟.png

  • 查看全局變量和環境變量

    操作步驟如下所示:
1.在右側點擊下拉列表列表,選擇其中一個環境
2.點擊Postman右上角眼睛圖標,即可查看對應環境變量和全局變量

    以上操作步驟如下所示:

0227查看全局變量和環境變量.png

  • 定義集合變量

    操作步驟如下所示:
1.在Postman左側點擊Collections,選擇任意一個Collection
2.在彈出的右側中,選擇Variable選項卡
3.填寫相應的集合變量信息即可

    以上操作步驟如下所示:

0228添加集合變量.png

  • 代碼定義變量

    除了以上三種方式定義變量,也可以在Tests和Pre-requests Script中進行定義
定義全局變量:pm.globals.set("變量名",變量值)
定義環境變量:pm.environment.set("變量名",變量值)
定義集合變量:pm.collectionVariables.set("變量名",變量值)

    示例如下所示:

0229定義變量InPreRequests.png

  • 其他定義變量

    定義變量除了以上幾種方式,還有另外一種方式。這種方式定義變量在不同的位置,編寫也有所不同,通過可以在URL、Params、Authorization、Headers和Body中定義,其操作步驟如下所示:
1.在URL、Params、Authorization、Headers和Body創建一個空的變量名
2.在以上位置把要創建變量的值右鍵選擇Set:環境|全局
3.選擇其中一個變量名即可

    以上操作步驟如下所示:

0230其他定義變量.png

2.3.5.2 獲取變量

    在定義好變量就可以獲取並使用變量了。在不同的位置獲取變量,編寫的規則也不盡相同,需要注意一下:

  • 如果是在請求參數中獲取變量(URL、Params、Authorization、Headers和Body),無論是全局變量、環境變量,還是集合變量,獲取的方式都是如下的規則:

{{變量名}}

  • 如果變量位於Tests和Pre-requests Script,則獲取不同類型的變量,編寫的代碼有所區別,如下所示:

獲取全局變量:pm.globals.get("變量名")
獲取環境變量:pm.environment.get("變量名")
獲取集合變量:pm.collectionVariables.get("變量名")

    以上示例如下所示:

0231獲取變量值.png

變量的使用地方非常多,如接口關聯等,請求前置腳本中會使用到變量等。

2.3.6 前置腳本

    前置腳本其實就是在Pre-requests Script中編寫的JavaScript腳本。

2.3.6.1 執行順序

    在請求發送之前,會先執行Pre-requests Script中的代碼

2.3.6.2 使用場景

    一般常用在發送請求前,需要對接口數據做進一步處理。如調用一個接口前,需要獲取到使用的cookie等。

前置腳本主要用於在發送請求之前,需要對發送的接口數據做進一步處理都可以使用前置腳本功能

2.3.6.2 實戰示例

    我們以一個登錄接口為示例,該接口基本信息如下所示:

  • 請求的登錄接口地址,有一個參數是需要獲取當前系統時間
  • 接口地址:http://httpbin.org/post
  • 接口參數如下所示:

0231獲取系統時間戳.png

    實現步驟如下所示:

  • 1.在前置腳本中編寫獲取系統時間戳的代碼,如下所示:
var timestamp=Date.parse(new Date())/1000
  • 2.將該值保存為環境變量,如下所示:
pm.environment.set("timestamp",timestamp)
  • 3、獲取變量的值並傳遞給參數timestamp

    以下詳細操作結果如下所示:

0232前置腳本示例.png

2.4 接口關聯

2.4.1 接口關聯定義

    在日常測試過程,經常會碰到這種情況。接口A返回的數據需要做為接口B的請求參數(即接口A的輸出參數做為接口B的輸入參數),我們稱這種情況為 接口關聯

2.4.2 接口關聯實現思路

    我們拋開Postman來整理下通用思路,如下所示:

  • 1、獲取上一個接口的返回數據
  • 2、將返回的數據保存一個變量
  • 3、在下一個接口發送請求前,獲取變量的值

    在Postman中如何實現呢?我們可以參考通用思路整理成以下的方式:

  • 1、發送請求並獲取到上一個接口的返回數據
  • 2、將返回的數據保存為全局或環境變量
  • 3、在下一個接口發送請求前,獲取全局或環境變量的值

2.4.3 接口關聯實踐示例

    示例相應的接口說明如下所示:

  • 1.接口A實現登錄示例,其返回數據中會有一個參數timestamp參數
  • 2.接口B實現發送請求前,需要獲取接口A返回數據中的timestamp值,做為本身的請求參數

    接口A的返回數據如下所示:

{
    "args": {},
    "data": "",
    "files": {},
    "form": {
        "password": "surpass",
        "timestamp": "1633851549",
        "username": "diana"
    },
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Content-Length": "52",
        "Content-Type": "application/x-www-form-urlencoded",
        "Host": "httpbin.org",
        "Postman-Token": "0247d754-25a1-4775-9673-348ce30678a1",
        "User-Agent": "PostmanRuntime/7.28.4",
        "X-Amzn-Trace-Id": "Root=1-6162989d-329af5e75ae151953220e30d"
    },
    "json": null,
    "origin": "183.192.236.236",
    "url": "http://httpbin.org/post"
}

    最終實現步驟如下所示:

  • 1.獲取接口A的返回數據並保存為環境變量

0233獲取返回數據並設置為環境變量.png

  • 2、在接口B中獲取環境/全局變量的值

0234獲取並使用上一個接口的值.png

2.5 返回數據獲取

    在做接口測試,返回數據比較多的一般為JSON格式,可能存在多層嵌套,所以對返回的JSON進行取值也不全一樣,我們來看看在Postman里面如何獲取,在Postman中獲取JSON數據的格式通常如下所示:

  • 單層結構: .key

  • 多層嵌套:.key.key

  • 多層嵌套帶數組:.key[index]

  • 請求數據如下所示:

{
    "personInfo": [
        {
            "nickName": "Surpass",
            "realName": "lyl"
        },
        {
            "nickName": "Diana",
            "realName": "zq"
        }
    ],
    "location": "sh"
}
  • 接口返回數據如下所示:
{
    "args": {},
    "data": "{\r\n    \"personInfo\":[\r\n        {\"nickName\":\"Surpass\",\"realName\":\"lyl\"},\r\n        {\"nickName\":\"Diana\",\"realName\":\"zq\"}\r\n    ],\r\n    \"location\":\"sh\"\r\n}",
    "files": {},
    "form": {},
    "headers": {
        "Accept": "*/*",
        "Accept-Encoding": "gzip, deflate, br",
        "Cache-Control": "no-cache",
        "Content-Length": "149",
        "Content-Type": "application/json",
        "Host": "httpbin.org",
        "Postman-Token": "6bbae7e9-3ef5-4f52-8737-fc4dcd80cf8f",
        "User-Agent": "PostmanRuntime/7.28.4",
        "X-Amzn-Trace-Id": "Root=1-6162a8bf-0e14645445d34fe042ea136b"
    },
    "json": {
        "location": "sh",
        "personInfo": [
            {
                "nickName": "Surpass",
                "realName": "lyl"
            },
            {
                "nickName": "Diana",
                "realName": "zq"
            }
        ]
    },
    "origin": "183.192.236.236",
    "url": "http://httpbin.org/post"
}

1.單層結構

    獲取返回數據中origin值,代碼如下所示:

// 1.獲取請求返回的數據
var returnJsonData=pm.response.json()
console.log("Retuen json data is:",returnJsonData)
// 2.獲取對應變量的值
var returnDataValue=returnJsonData.origin
console.log("Retuen json data value is:",returnDataValue)

2.多層嵌套

    獲取返回數據中json中location值,代碼如下所示:

// 1.獲取請求返回的數據
var returnJsonData=pm.response.json()
console.log("Retuen json data is:",returnJsonData)
// 2.獲取對應變量的值
var returnDataValue=returnJsonData.json.location
console.log("Retuen json data value is:",returnDataValue)

3.多層嵌套帶數組

    獲取返回數據中json中personInfo第二個值,代碼如下所示:

// 1.獲取請求返回的數據
var returnJsonData=pm.response.json()
console.log("Retuen json data is:",returnJsonData)
// 2.獲取對應變量的值
var returnDataValue=returnJsonData.json.personInfo[1]
console.log("Retuen json data value is:",returnDataValue)

在JavaScript索引從0開始

原文地址:https://www.cnblogs.com/surpassme/p/15390018.html

本文同步在微信訂閱號上發布,如各位小伙伴們喜歡我的文章,也可以關注我的微信訂閱號:woaitest,或掃描下面的二維碼添加關注:


免責聲明!

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



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