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

相关推荐
GreenTea1 小时前
一文搞懂Harness Engineering与Meta-Harness
前端·人工智能·后端
killerbasd3 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
吴声子夜歌3 小时前
ES6——二进制数组详解
前端·ecmascript·es6
码事漫谈3 小时前
手把手带你部署本地模型,让你Token自由(小白专属)
前端·后端
ZC跨境爬虫3 小时前
【爬虫实战对比】Requests vs Scrapy 笔趣阁小说爬虫,从单线程到高效并发的全方位升级
前端·爬虫·scrapy·html
爱上好庆祝3 小时前
svg图片
前端·css·学习·html·css3
橘子编程4 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
王夏奇4 小时前
python中的__all__ 具体用法
java·前端·python
叫我一声阿雷吧4 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰4 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js