postman怎么获取上一个接口执行完后的参数

在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. 最佳实践

  1. 变量命名规范 :使用清晰的命名,如accessToken而不是token

  2. 清理变量:不需要的变量及时清理

  3. 使用不同环境:开发、测试、生产使用不同的环境

  4. 错误处理:检查变量是否存在

  5. 文档化:在描述中说明变量的用途

    // 检查变量是否存在
    if (!pm.environment.get("accessToken")) {
    console.warn("警告: accessToken 不存在");
    // 可以设置默认值
    pm.environment.set("accessToken", "default-token");
    }

    // 清理变量
    pm.environment.unset("tempToken");
    pm.environment.unset("tempData");

变量作用域优先级

Postman中变量的优先级(从高到低):

  1. 本地变量(Local Variables)

  2. 数据变量(Data Variables)

  3. 环境变量(Environment Variables)

  4. 集合变量(Collection Variables)

  5. 全局变量(Global Variables)

通过合理使用这些变量传递方法,你可以在Postman中轻松地实现接口间的参数传递和数据共享。

相关推荐
weixin_382395237 小时前
为小工厂量身打造:本地部署的物料管理系统带缺料计算
前端·制造
__zRainy__7 小时前
解决pnpm v10+不自动构建
前端·pnpm·工程化
猫猫不是喵喵.8 小时前
Vue3 Props 属性
前端·javascript·vue.js
醉城夜风~9 小时前
CSS元素显示模式(display)
前端·css
AI大模型-小华9 小时前
Codex 三方充值快速入门指南
java·前端·数据库·chatgpt·ai编程·codex·chatgpt pro
做前端的娜娜子12 小时前
同一链接实现 PC Web 与移动 H5 自适应
前端·掘金·金石计划
小帅不太帅12 小时前
架构没变、规模没变,DeepSeek V4 Flash 正式版凭什么暴涨 47 分?
前端·aigc·deepseek
jarvisuni12 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·javascript·算法
卷福同学13 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端