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中轻松地实现接口间的参数传递和数据共享。

相关推荐
小程故事多_802 小时前
穿透 AI 智能面纱:三大高危漏洞(RCE/SSRF/XSS)的攻防博弈与全生命周期防护
前端·人工智能·aigc·xss
koiy.cc2 小时前
新建 vue3 项目
前端·vue.js
虹科网络安全2 小时前
艾体宝新闻 | NPM 生态系统陷入困境:自我传播恶意软件在大规模供应链攻击中感染了 187 个软件包
前端·npm·node.js
qq_12498707532 小时前
基于springboot+vue的家乡特色旅游宣传推荐系统(源码+论文+部署+安装)
java·前端·vue.js·spring boot·毕业设计·计算机毕设·计算机毕业设计
pas1362 小时前
38-mini-vue 实现解析 element
前端·javascript·vue.js
We་ct2 小时前
LeetCode 3. 无重复字符的最长子串:滑动窗口最优解演进与解析
前端·算法·leetcode·typescript
奔跑的web.2 小时前
前端使用7种设计模式的核心原则
前端·javascript·设计模式·typescript·vue
蜕变菜鸟2 小时前
折叠页面 css
前端
菩提小狗3 小时前
小迪安全2022-2023|第35天:WEB攻防-通用漏洞&XSS跨站&反射&存储&DOM&盲打&劫持|web安全|渗透测试|
前端·安全·xss