接触过任何语言类和一些测试工具的同学应该都知道变量这个概念。
变量是用来存储动态值的静态标识符。变量标识的信息可以更改,但是对变量的操作保持不变。
Postman 中的变量也是如此。我们可以在多个位置重用变量值。如果变量的值发生变化,变量的每个实例都会相应的更改,从而减少了重复修改的需要和出错的可能性。
比如,我们的所有接口都是同一个域名http://nemo.test
,但这个域名可能会变,比如我们运行在开发环境的时候,域名会变为 http://nemo.dev
,如果我们不使用变量而是老老实实写的话。当我们写上几十上百个请求的时候,此时如果需要在不同的环境中运行时,将会是一个噩梦,你需要逐一修改每个请求的 Host。
我们还可以通过变量从一个请求中获取数据,在另一个请求中使用它们。这就是依赖的处理,后面的章节会再讲。
简而言之,使用变量有如下好处:
- 重用数据使代码(请求)保持DRY(don't repeat yourself 不要自我重复);
- 配置不同的设置以使用不同的环境;
- 从 Collection 中的响应中提取数据供后续请求使用。
在 Postman 中有以下几种变量:
- 局部变量
local
- data 文件中的变量
data
- 环境变量
environment
- Collection 中的变量
collection
- 全局变量
global
- 内置变量
dynamic
除局部变量以外的其他变量值只能是字符串,如果要存储对象或者其他数据类型的数据,需要先转换为字符串(
JSON.stringify()
),然后在使用时转换回去(JSON.parse()
)。
变量优先级
以下的图可以说明变量的优先级,越外层的变量优先级越低。
比如同一个变量名 host,在 environment 和 global 中分别设置了不同的值,那么最终运行请求的时候,实际使用的是 environment 中的值,因为 environment 变量的优先级比 global 更高。
设置变量
我们先了解一下如何设置这些变量,有部分内容已经在前面提到过了,另外内置变量由 Postman 提供不需要设置。
1. 局部变量 local variable
局部变量是在代码(Pre-request,Tests)中设置的。使用 JavaScript 的变量语法即可。
其优先级最高,但是仅在当前的脚本环境中有效,对于上图中的json
变量,只在当前请求的 Tests 中的脚本有效。
data 文件中的变量 data
在 Collection 运行中我们讲过可以加载数据驱动的文件(CSV,JSON)中的值。
上图中通过加载的数据文件中读取出的三个变量path
、value
、p
。
环境变量 environment
环境变量可以通过两种方式设置,一种是上一节讲过的在环境设置中进行设置:
上图中设置了一个变量host
,其值为http://127.0.0.1
。
另一种设置环境变量的方法是,在代码(Pre-request,Tests)中设置。
上图中通过代码设置了一个变量 db_host
,其值为 192.168.1.222
。
Collection 中的变量 collection
在 Collection 中可以设置变量,设置的方法是在 Collection 编辑界面的 Variables
选项卡中:
上图中设置了一个 Collection 变量 path
,其值为 post
。
也可以看到这里的设置界面很类似环境变量的设置。
全局变量 global
全局变量的设置类似环境变量的设置,也有两种方式。
一种方法,那就是通过代码(Pre-request,Tests)设置。
上图中通过代码设置了一个全局变量 username
, 其值为nemo
。
另一种方法是在环境设置(就是设置环境变量那个地方)界面进行设置:
上图中设置了全局变量PI
,其值为 3.14159265358
。