在Postman中获取上一个接口执行完后的参数,主要有以下几种方法:
1. 使用环境变量(Environment Variables)
这是最常用的方法:
设置变量(在第一个接口的Tests中):
// 解析响应
const responseJson = pm.response.json();
// 将需要的值保存到环境变量
pm.environment.set("token", responseJson.token);
pm.environment.set("userId", responseJson.data.userId);
pm.environment.set("sessionId", responseJson.sessionId);
// 也可以保存数组或对象
pm.environment.set("userData", JSON.stringify(responseJson.data));
获取变量(在第二个接口中):
// 在URL中使用
// 例如:{{baseUrl}}/users/{{userId}}/profile
// 在请求体中使用
// 在Body的JSON中使用:{{token}}
// 在Headers中使用
// Authorization: Bearer {{token}}
// 在Pre-request Script中获取
console.log("用户ID:", pm.environment.get("userId"));
console.log("Token:", pm.environment.get("token"));
// 如果是JSON字符串,需要解析
const userData = JSON.parse(pm.environment.get("userData") || "{}");
console.log("用户数据:", userData);
2. 使用全局变量(Global Variables)
适用于所有接口共享的数据:
设置全局变量:
// 在第一个接口的Tests中
pm.globals.set("globalToken", pm.response.json().access_token);
pm.globals.set("apiVersion", "v2.0");
获取全局变量:
// 在第二个接口中
const token = pm.globals.get("globalToken");
const version = pm.globals.get("apiVersion");
3. 使用集合变量(Collection Variables)
适用于当前集合内的接口共享:
设置集合变量:
// 在第一个接口的Tests中
pm.collectionVariables.set("collectionToken", responseJson.token);
获取集合变量:
// 在同一个集合的第二个接口中
const collToken = pm.collectionVariables.get("collectionToken");
4. 完整示例
第一个接口:登录接口
// 登录接口的Tests标签
pm.test("登录成功", function() {
const response = pm.response.json();
// 验证状态码
pm.response.to.have.status(200);
// 保存token到环境变量
pm.environment.set("accessToken", response.data.accessToken);
// 保存用户ID
pm.environment.set("currentUserId", response.data.userId);
// 保存其他需要的参数
pm.environment.set("userRole", response.data.role);
console.log("Token已保存:", response.data.accessToken);
console.log("用户ID:", response.data.userId);
});
第二个接口:获取用户信息
// 在URL中使用
// {{baseUrl}}/users/{{currentUserId}}
// 在Headers中使用
// Authorization: Bearer {{accessToken}}
// 在Pre-request Script中验证
const token = pm.environment.get("accessToken");
if (!token) {
console.error("Token不存在,请先运行登录接口");
// 可以停止请求
throw new Error("请先获取token");
}
5. 在Pre-request Script中处理
在第二个接口的Pre-request Script中,可以处理从环境变量获取的数据:
// 获取上一个接口保存的参数
const token = pm.environment.get("accessToken");
const userId = pm.environment.get("currentUserId");
// 动态设置请求头
pm.request.headers.add({
key: "Authorization",
value: "Bearer " + token
});
// 动态修改URL
const originalUrl = pm.request.url.toString();
pm.request.url = originalUrl.replace("{userId}", userId);
// 动态设置请求体
if (pm.request.body.raw) {
const body = JSON.parse(pm.request.body.raw);
body.userId = userId;
body.timestamp = new Date().toISOString();
pm.request.body.raw = JSON.stringify(body);
}
6. 使用数据变量(Data Variables)
在集合运行时使用:
// 在集合运行前设置数据
pm.variables.replaceIn("{{$guid}}"); // 生成GUID
pm.variables.replaceIn("{{$timestamp}}"); // 时间戳
7. 批量设置变量
可以批量从响应中提取多个值:
// 从响应JSON中提取多个参数
const response = pm.response.json();
// 批量设置
const paramsToSave = {
"authToken": response.token,
"expiresIn": response.expires_in,
"refreshToken": response.refresh_token,
"userName": response.user.name
};
Object.keys(paramsToSave).forEach(key => {
if (paramsToSave[key]) {
pm.environment.set(key, paramsToSave[key]);
}
});
8. 使用动态变量
Postman提供了内置的动态变量:
// 在Tests中使用
console.log("GUID:", pm.variables.replaceIn("{{$guid}}"));
console.log("时间戳:", pm.variables.replaceIn("{{$timestamp}}"));
console.log("随机数:", pm.variables.replaceIn("{{$randomInt}}"));
// 在URL或请求体中使用
// {{$guid}} {{$timestamp}} {{$randomInt}}
9. 链式调用多个接口
可以在集合中使用:
// 在Tests中调用下一个请求
if (pm.response.code === 200) {
// 保存数据
pm.environment.set("orderId", pm.response.json().orderId);
// 延迟后执行下一个请求
setTimeout(() => {
pm.sendRequest({
url: '{{baseUrl}}/orders/{{orderId}}',
method: 'GET',
header: {
'Authorization': 'Bearer {{accessToken}}'
}
}, function (err, response) {
console.log(response.json());
});
}, 1000);
}
10. 最佳实践
-
变量命名规范 :使用清晰的命名,如
accessToken而不是token -
清理变量:不需要的变量及时清理
-
使用不同环境:开发、测试、生产使用不同的环境
-
错误处理:检查变量是否存在
-
文档化:在描述中说明变量的用途
// 检查变量是否存在
if (!pm.environment.get("accessToken")) {
console.warn("警告: accessToken 不存在");
// 可以设置默认值
pm.environment.set("accessToken", "default-token");
}// 清理变量
pm.environment.unset("tempToken");
pm.environment.unset("tempData");
变量作用域优先级
Postman中变量的优先级(从高到低):
-
本地变量(Local Variables)
-
数据变量(Data Variables)
-
环境变量(Environment Variables)
-
集合变量(Collection Variables)
-
全局变量(Global Variables)
通过合理使用这些变量传递方法,你可以在Postman中轻松地实现接口间的参数传递和数据共享。