细说postman变量中的local

关于local变量,手册中的原文如下:

Local variables are temporary, and only accessible in your request
scripts. Local variable values are scoped to a single request or
collection run, and are no longer available when the run is complete.

1. 一知半解

按我之前的理解个local变量的生命周期是一次单独的请求。一次最复杂的请求包括如下步骤:

集合pre-request
文件夹pre-request
请求中的pre-request
发送请求, 收到响应
集合test
文件夹test
请求中的test

也就是说,你可以在任何步骤里通过pm.variables.set设置一个变量,然后在其后续步骤中通过pm.variables.get取变量值。但无论如何,变量的生命也仅存在于这单一的一个请求中,不能跨越请求。然而真的是这样么?

2. 跨越请求的local

来看这样一个例子
Test集合中有request1和request2两个请求。
我们在request1的Tests中设置local变量name=lunar, 如下图所示:
在这里插入图片描述
在request2中,我们在get请求引用name值。同时在Tests中尝试取request1中的name值。
在这里插入图片描述
接下来,我们整体运行一次Test集合
在这里插入图片描述执行后,在postman cosole中可以看到如下结果:
在这里插入图片描述
这说明我们在request2中可以取到request1中的name值!但name是local类型啊!居然跨越了请求!

3. 好像又不行了

还是2中的例子,我们换一种执行方式。
我们用手动send方式,分别发送request1和request2
在这里插入图片描述
执行后在postman console中看到如下结果:
在这里插入图片描述
很明显,request2中没能取到request1中设置的name。弄啥嘞!

4. 深入

再来好好看看手册中的这句话:

Local variable values are scoped to a single request or collection run

首先,local变量的作用范围是a single request run,也就是单一请求执行。这也是为什么会出现第3部分中的实验结果。
然后,local变量的作用范围还可以是a collection run! 什么是a collection run呢?就是第2部分中的操作方式了。一个集合中的所有请求,从头至尾执行一遍。整个过程中local变量都是有效的。这也是为什么会出现第2部分中的实验结果。
可见,local变量的生命周期,是一次run!无论是单一请求的一次run,还是集合的一次run。只要这次run没有全部执行完,local变量就是生效的。

5. 实践中的用法

  1. 类似将请求A中的结果传给请求B使用,可以使用local变量实现了。也就是
pm.variables.set
pm.variables.get
  1. 如果想在同一集合中实现单次发请求,仍然可以跨请求传数据(第3部分的场景),那么用collection变量比较适合(不得不说,个人认为还是有这种需要求的,比如在写测试时,这样调试比较方便)。collection变量,一旦设置会一直存在,生命跨越所有run!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值