欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

细说postman变量中的local

程序员文章站 2024-03-14 11:23:52
...

关于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, 如下图所示:
细说postman变量中的local
在request2中,我们在get请求引用name值。同时在Tests中尝试取request1中的name值。
细说postman变量中的local
接下来,我们整体运行一次Test集合
细说postman变量中的local执行后,在postman cosole中可以看到如下结果:
细说postman变量中的local
这说明我们在request2中可以取到request1中的name值!但name是local类型啊!居然跨越了请求!

3. 好像又不行了

还是2中的例子,我们换一种执行方式。
我们用手动send方式,分别发送request1和request2
细说postman变量中的local
执行后在postman console中看到如下结果:
细说postman变量中的local
很明显,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!
相关标签: postman