Postman请求运行顺序及Workflow
作为一款接口调试利器, Postman的更新迭代速度很快, 不断加入了很多新的功能.使的api设计,测试,监控, Mock,以及团队协作更加方便.
修改执行顺序
在遇到有接口依赖的情况, 我们往往需要接口按顺序执行, 之前可以通过在一个请求的Pre-request Scripts中使用pm.sendRequest发送所依赖的请求来实现, 新版本Postman在Run Collection中我们可以修改请求的执行顺序, 如下图:

这里将所有的接口放到一个Collection请求集合中, 在"百度获取token"这个请求的Tests脚本中中,将access_token存为全局变量, 以供"百度orc"使用.
我们可以直接拖动, 改变默认Collection的执行顺序, 也可以选择不运行哪些请求.
Workflow工作流
除了在Run Collection时调整顺序外,我们还可以通过postman.setNextRequest("同Collection下保存的请求名");来手动控制请求的跳转.
顺序结构
如下图, 新建一个Collection, 新增A, B, C, D, E, F 5个请求, 在请求A的Tests脚本中添加
postman.setNextRequest("D");
以使A执行完下一个执行D请求.



从上图我们可以看出, 实际上跳过了请求B, C, 直接跳转到D请求.
注意: 如果D请求在运行时未勾选, 则只会运行A请求
分支结构
通常情况下,我们可以使用if判断来控制流程跳转, 比如, 通过判断A请求是否成功来分别跳转到D请求或B请求.
var jsonData = pm.response.json()
if(jsonData.args.a == 'a'){
postman.setNextRequest("D");
}
else{
postman.setNextRequest("B");
}
循环结构
我们可以通过在最后一个请求中使用postman.setNextRequest(), 之前的请求, 来完成一个循环, 比如在F请求使用postman.setNextRequest("A"), 就会无限循环的执行下去, 如下图所示:

一般来说, 循环中一定要设置中止条件, 一般通过if判断是否postman.setNextRequest()来控制是否继续循环.
示例: 异步接口轮询
我们可以用一个postman.setNextRequest指向自身的请求来完成异步接口的轮询.
- 新建一个Collection, 新建一个"创建订单接口", 请求为:
http://115.28.108.130:5000/api/order/create/?
user_id=123&goods_id=123&num=2&amount=20.0
这是一个异步接口, 接口会返回一个order_id用于查询订单结果. 我们在Tests中,将获取到的order_id存为全局变量以供下一个接口使用, 如下图所示:
var jsonData = pm.response.json()
pm.globals.set("order_id", jsonData.order_id);

- 新建一个"获取订单结果"接口, 请求为:
http://115.28.108.130:5000/api/order/get_result/?order_id={{order_id}}
这是一个获取订单接口, 订单不确定多长时间创建好, 如果订单在创建过程中则返回"{}", 如果创建成功则返回:
{
"amount": "20.0",
"goods_id": "123",
"num": "2",
"user_id": "123"
}
我们在Tests脚本中设置轮询条件, 下个请求指向自身如下:
if(pm.response.text() == "{}\n"){
postman.setNextRequest("获取订单结果");
}
Run Collection 我们发现, "获取订单结果"请求被快速的请求, 直到停止, 实际上我们还需要设置一个轮询间隔, 我们将postman.setNextRequest放到一个函数种,然后用setTimeout来延迟一定时间运行.
function loop(){
postman.setNextRequest("获取订单结果")
}
if(pm.response.text() == "{}\n"){
setTimeout(loop, 5000); // 设置间隔5s
}
如下图, "获取订单结果"请求会5妙执行一次, 知道订单处理完成.

注意:
- 一般我们还要设置最大轮询次数或最大轮询时间, 来防止接口始终返回"{}\n", 导致轮询无法中止(可以通过使用整数变量自增完成).
- 在轮询完也可以加上断言(写到else中)
Postman请求运行顺序及Workflow的更多相关文章
- 有一台机器,上面有m个储存空间。然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间(据O[i]个空间(其中O[i]<R[i])。问怎么安排这n个请求的顺序,使
有一台机器,上面有m个储存空间.然后有n个请求,第i个请求计算时需要占 R[i]个空间,储存计算结果则需要占据O[i]个空间(据O[i]个空间(其中O[i]<R[i]).问怎么安排这n个请求的顺 ...
- ajax多个请求执行顺序
先说结论再说原因 结论:比如点击事件触发了两个ajax请求或者更多的请求,是没有执行顺序的,各个请求的快慢完全取决于返回的快慢,或许你在浏览器调试窗口看见的是先发了一个请求,再发了一个,但是完全没有等 ...
- Jmeter结构体系及运行顺序
一:jmeter运行原理: jmeter时以线程的方式来运行的(由于jmeter是java开发的所以是运行在JVM虚拟机上的,java也是支持多线程的) 二:jmeter结构体系 1.取样器smapl ...
- Jmeter 结构体系及运行顺序
一.Jmeter 运行原理: Jmeter 时以线程的方式来运行的(由于Jmeter 是 java 开发的所以是运行在 JVM 虚拟机上的,java 也是支持多线程的) 二.Jmeter 结构体系 1 ...
- Java类的基本运行顺序是怎样
我们以下面的类来说明一个基本的 Java 类的运行顺序: public class Demo{ private String name; private int age; public Demo(){ ...
- Java类的基本运行顺序
不看不知道,一看还真吓了一跳!Java类的基本运行顺序你真的知道吗?如果你有疑惑,那就看下面这篇文章吧. 原文出自:[url]http://column.ibeifeng.com/chenchen ...
- testng标签运行顺序
testng的annotations运行顺序为: @BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @AfterMethod @AfterClas ...
- 源码深度解析SpringMvc请求运行机制(转)
源码深度解析SpringMvc请求运行机制 本文依赖的是springmvc4.0.5.RELEASE,通过源码深度解析了解springMvc的请求运行机制.通过源码我们可以知道从客户端发送一个URL请 ...
- WindowsForm界面 运行顺序 Form属性
WindowsForm界面 运行顺序 Form属性 什么是类:1 类是面向对象编程的基本单元.类包含了两个成员 字段(Field)和方法方法(Method) 2 字段即变量 方法即函数什么是字段:字段 ...
随机推荐
- Python面向对象中的继承、多态和封装
Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...
- 使用 backdoor 工具注入ShellCode
backdoor-factory 顾名思义,直接翻译过来就是后门工厂的意思.其利用打补丁的方式编码加密PE文件,可以轻松的生成win32PE后门程序,从而帮助我们绕过一些防病毒软件的查杀,达到一定得免 ...
- javascript 利用数组制作分页效果
代码 参数: pageSize:一页的总数 currentPage:当前的页数 skipNum:跳过的数量 arr:数组 返回值: newArr分页后的数组 var pagination = func ...
- jstl的forEach 循环
jstl的forEach循环一般有两种格式 1.当需要操作循环的下标时,或者需要固定循环的次数时: <c:forEach begin="0" end="5" ...
- Linux内核移植的若干问题
- Oracle笔记(十五) 数据库备份
数据库的备份操作是在整个项目运行中最重要的工作之一. 一.数据的导出和导入 数据的导出和导入是针对于一个用户的备份操作,可以按照如下的方式完成: 1. 数据的导出 在硬盘上建立一个文件夹:c:\ba ...
- redis cluster(集群)模式的创建方式
redis常用的架构有三种,单例.哨兵.集群,其他的都说过了,这里只简单介绍集群搭建. 单例最简单没什么好说的. 哨兵之前说过,该模式下有哨兵节点监视master和slave,若master宕机可自动 ...
- java线程基础巩固---如何给你的应用程序注入钩子程序
这次做一个比较有意思的实验,我们知道当一个程序如果抛异常了其程序肯定会挂掉,那有木有可能在程序异常退出时能执行一段咱们自己的代码,比如说服务器在异常退出时需要做一些额外的资源清理,像这种场景就正好是这 ...
- 【Codeforces】Orz Panda Cup
大大出的题 大大经常吐槽没有人补,所以我决定做一个 A. APA of Orz Pandas 题意:给你一个包含+-*/%和()的表达式,让你把它转化成java里BigInteger的形式 大概就像这 ...
- Appium&Java自动化实现移动端几种典型动作
一.Appium4.0 Pinch&Zoom /* * @FileName Pinch_Zoom: Pinch_Zoom * @author davieyang * @create 2018- ...