全局变量与环境变量
字数
1633 字
阅读时间
7 分钟
一、概念
- 全局变量:全局变量是全局唯一的,不可重复定义的变量
- 环境变量:
- 一个变量只能属于某个环境,在某个环境中变量不可重复定义
- 在环境与环境之间可以定义重复的字符串
- 一个环境可以包含多个环境变量
- 常见环境分类:开发环境、测试环境、生产环境
二、设置变量
- 全局变量:
- 代码设置:
pm.globals.set("var_name", value);- var_name是变量名,value是变量值
- 代码设置:
- 环境变量:
- 代码设置:
pm.environment.set("var_name", value);
- 代码设置:
三、获取变量值
- 全局变量:
- 方法1:请求参数(Postman界面中)中获取:
- 方法2:代码中获取:
var value = pm.globals.get("var_name");
- 方法1:请求参数(Postman界面中)中获取:
- 环境变量:
- 方法1:请求参数中获取:
- 方法2:代码中获取:
var value = pm.environment.get("var_name");
- 方法1:请求参数中获取:
四、用途 --> postman请求前置脚本 与 postman关联
1. postman请求前置脚本
若实现了请求前置脚本,则在postman界面将请求方法发送到postman内部后,会先执行请求前置脚本,再分析http请求方法、URL等http请求信息1)工作原理
- 原理图:

- 文字解析:请求传入postman内部后,请求前置脚本会被优先执行,随后再分析http请求(该请求包含前置脚本设置的变量),随后发送给服务器
2)案例 --> 时间戳
- 定义:对应绝对时间 --> 从 1970年1月1日00:00:00到现在 所经历的秒数
JavaScript
// 获取时间戳
var timestamp = new Date().getTime()
// 将时间戳设置到全局变量
pm.globals.set("glb_timestamp", timestamp)- 案例:调用百度首页接口,将时间戳穿给服务器
- 编写请求前置脚本,获取时间戳并设置全局变量

- 请求前置脚本编写完成后进行第三步即可,这里点击发送时间戳只是为了让初学者认识到全局变量的存在
- 查看全局变量

- 获取全局变量

- 发送变量后,打开postman控制台查看是否成功将变量发送给目标服务器


2. 🌟postman关联 --> 常用于多个http请求间的数据关联/依赖关系
该功能非常常用,务必重视
- 功能说明:存在A接口与B接口,A接口 依赖 B接口的数据,则应作如下步骤的动作以满足需求:
- 向B接口发送http请求,获取数据
- 将数据设置到全局变量(环境变量)中
- A接口 获取全局变量(环境变量)中的数据值,并进行使用
案例1
请求 获取天气接口,提取响应结果中的城市,将城市名 给百度搜索接口使用- 获取天气接口,提取响应中的城市名信息

- 获取全局变量glb_city,将城市名传入百度的搜索接口,成功实现搜索功能

案例2
- 背景:员工管理模块中,每个账户都有一个专属令牌,每次进行增加员工、删除员工、修改员工、查询员工都必须传入令牌(token)
- 系统分析:
- 登录成功,返回的“令牌”,被 添加、查询、修改、删除 员工接口依赖
- 添加 成功,返回的“员工id”,被 查询、修改、删除 员工接口依赖
- 依赖1: --> 提取令牌:
- 发送http请求,在响应体中得到data值(登录成功后返回的"data"中就包含了令牌信息)
- 将data值与 拼接,组成一个合法令牌
- 将拼接后的令牌设置到环境变量中(在Tests中通过代码写入)
JavaScript
// 拼接 data的值,添加 Bearer 和 空格。组成合法令牌
// 获取 响应体,保存在 jsonData变量中。
var jsonData = pm.response.json()
// 提取 data的值。保存在 tmp_token 中。
var tmp_token = jsonData.data
// 拼接 Bearer 和 空格 到 data值的前面。 "Bearer" + " " + tmp_token
pm.environment.set("env_token", "Bearer"+" "+tmp_token)五、环境变量设置
- 步骤图:

- 图示是在图形化界面设置环境变量。若想使用代码设置环境变量,或使用环境变量中的值,需要先在右上角选择指定环境,才能设置或获取该环境中的环境变量
六、路径参数
- 图示案例:

| 对比维度 | 路径参数 (Path Parameter) | 查询参数 (Query Parameter) |
|---|---|---|
| URL 位置 | 路径段中 /users/123 | ? 之后 /users?id=123 |
| 协议标准 | HTTP URL 路径标准(RFC 3986) | HTTP URL 查询字符串标准(RFC 3986) |
| 🌟框架模板语法(Postman中Params填写) | {id}(FastAPI)、:id(Express)等 | 无特殊模板语法,直接按 ?key=value 解析 |
| 是否必填 | 通常必填,缺失会导致 404 | 通常可选,缺失有默认值或忽略 |
| 参数数量 | 一般 1-3 个,过多影响可读性 | 可多个,用 & 拼接无严格限制 |
| 顺序要求 | 固定位置,顺序影响路由匹配 | 无序,?a=1&b=2 与 ?b=2&a=1 等价 |
| 主要用途 | 定位唯一资源(ID、名称) | 筛选/过滤/排序/分页/搜索 |
| RESTful 语义 | 强,体现资源层级关系 | 弱,附加操作条件 |
| 缓存影响 | 不同路径视为不同资源,独立缓存 | 同一路径不同参数,缓存策略需额外配置 |
| 示例 | /orders/10086 /users/123/posts/456 | ?status=paid&page=1&sort=desc |
| FastAPI 写法 | @app.get("/users/{user_id}") | @app.get("/users") + 函数参数 age: int = None |
| Express 写法 | app.get("/users/:id") | app.get("/users") + req.query.age |
| 安全性注意 | 避免暴露敏感 ID(如自增主键) | 注意参数校验,防止 SQL 注入/越权 |
| 典型场景 | 获取指定用户、订单、文章详情 | 列表搜索、分页、过滤、排序 |