Postman請求運(yùn)行順序及Workflow

作為一款接口調(diào)試?yán)? Postman的更新迭代速度很快, 不斷加入了很多新的功能.使的api設(shè)計(jì),測試,監(jiān)控, Mock,以及團(tuán)隊(duì)協(xié)作更加方便.

修改執(zhí)行順序

在遇到有接口依賴的情況, 我們往往需要接口按順序執(zhí)行, 之前可以通過在一個(gè)請求的Pre-request Scripts中使用pm.sendRequest發(fā)送所依賴的請求來實(shí)現(xiàn), 新版本Postman在Run Collection中我們可以修改請求的執(zhí)行順序, 如下圖:


Run Collection更改請求順序

這里將所有的接口放到一個(gè)Collection請求集合中, 在"百度獲取token"這個(gè)請求的Tests腳本中中,將access_token存為全局變量, 以供"百度orc"使用.
我們可以直接拖動(dòng), 改變默認(rèn)Collection的執(zhí)行順序, 也可以選擇不運(yùn)行哪些請求.

Workflow工作流

除了在Run Collection時(shí)調(diào)整順序外,我們還可以通過postman.setNextRequest("同Collection下保存的請求名");來手動(dòng)控制請求的跳轉(zhuǎn).

順序結(jié)構(gòu)

如下圖, 新建一個(gè)Collection, 新增A, B, C, D, E, F 5個(gè)請求, 在請求A的Tests腳本中添加

postman.setNextRequest("D");

以使A執(zhí)行完下一個(gè)執(zhí)行D請求.


postman.setNextRequest設(shè)置A直接跳轉(zhuǎn)到D

默認(rèn)執(zhí)行順序

實(shí)際執(zhí)行順序

從上圖我們可以看出, 實(shí)際上跳過了請求B, C, 直接跳轉(zhuǎn)到D請求.

注意: 如果D請求在運(yùn)行時(shí)未勾選, 則只會運(yùn)行A請求

分支結(jié)構(gòu)

通常情況下,我們可以使用if判斷來控制流程跳轉(zhuǎn), 比如, 通過判斷A請求是否成功來分別跳轉(zhuǎn)到D請求或B請求.

var jsonData = pm.response.json()

if(jsonData.args.a == 'a'){
    postman.setNextRequest("D");
}
else{
    postman.setNextRequest("B");
}

循環(huán)結(jié)構(gòu)

我們可以通過在最后一個(gè)請求中使用postman.setNextRequest(), 之前的請求, 來完成一個(gè)循環(huán), 比如在F請求使用postman.setNextRequest("A"), 就會無限循環(huán)的執(zhí)行下去, 如下圖所示:


無線循環(huán)執(zhí)行

一般來說, 循環(huán)中一定要設(shè)置中止條件, 一般通過if判斷是否postman.setNextRequest()來控制是否繼續(xù)循環(huán).

示例: 異步接口輪詢

我們可以用一個(gè)postman.setNextRequest指向自身的請求來完成異步接口的輪詢.

  1. 新建一個(gè)Collection, 新建一個(gè)"創(chuàng)建訂單接口", 請求為:
http://115.28.108.130:5000/api/order/create/?
user_id=123&goods_id=123&num=2&amount=20.0

這是一個(gè)異步接口, 接口會返回一個(gè)order_id用于查詢訂單結(jié)果. 我們在Tests中,將獲取到的order_id存為全局變量以供下一個(gè)接口使用, 如下圖所示:

var jsonData = pm.response.json()
pm.globals.set("order_id", jsonData.order_id);
保存order_id為全局變量
  1. 新建一個(gè)"獲取訂單結(jié)果"接口, 請求為:
http://115.28.108.130:5000/api/order/get_result/?order_id={{order_id}}

這是一個(gè)獲取訂單接口, 訂單不確定多長時(shí)間創(chuàng)建好, 如果訂單在創(chuàng)建過程中則返回"{}", 如果創(chuàng)建成功則返回:

{
    "amount": "20.0",
    "goods_id": "123",
    "num": "2",
    "user_id": "123"
}

我們在Tests腳本中設(shè)置輪詢條件, 下個(gè)請求指向自身如下:

if(pm.response.text() == "{}\n"){
    postman.setNextRequest("獲取訂單結(jié)果");
}

Run Collection 我們發(fā)現(xiàn), "獲取訂單結(jié)果"請求被快速的請求, 直到停止, 實(shí)際上我們還需要設(shè)置一個(gè)輪詢間隔, 我們將postman.setNextRequest放到一個(gè)函數(shù)種,然后用setTimeout來延遲一定時(shí)間運(yùn)行.

function loop(){
    postman.setNextRequest("獲取訂單結(jié)果")
}

if(pm.response.text() == "{}\n"){
    setTimeout(loop, 5000);  // 設(shè)置間隔5s
}

如下圖, "獲取訂單結(jié)果"請求會5妙執(zhí)行一次, 知道訂單處理完成.


每隔5s輪詢"獲取訂單結(jié)果"接口

注意:

  1. 一般我們還要設(shè)置最大輪詢次數(shù)或最大輪詢時(shí)間, 來防止接口始終返回"{}\n", 導(dǎo)致輪詢無法中止(可以通過使用整數(shù)變量自增完成).
  2. 在輪詢完也可以加上斷言(寫到else中)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容