Postman 如何在不同接口之间传递数据

Postman是一个强大的 API 开发工具,它使得开发者可以发送请求、测试和文档化 API。在实际使用中,我们经常需要在不同接口之间传递数据,比如前一个请求的响应数据需要作为后一个请求的输入参数、将获取到的 token 凭证作用于全局的其它接口等。Postman 提供了多种方式来实现数据的传递和共享,主要可以通过环境变量、全局变量、集合变量和局部变量来存储数据,并在接口之间传递数据,详情见下文。

初识 Postman 变量

Postman 中提供了多种类型的变量,以便于管理和使用数据:

  • 环境变量:特定于环境的变量,适用于模拟不同的开发、测试和生产环境。
  • 全局变量:在所有环境下都可以访问的变量。
  • 集合变量:仅在特定 Postman 集合范围内有效的变量。
  • 局部变量(临时变量) :仅在当前请求的预请求脚本或测试脚本中临时存在的变量。

使用环境变量传递数据

环境变量非常适合存储特定环境下需要的配置信息,比如 API 的域名、认证 token 等。通过环境变量传递数据的步骤如下:

1.创建和选择环境

Postman 的左侧边栏,点击"Environments"选项,然后点击"+"创建一个新环境,创建环境后,定义你需要的变量及其初始值。

2.在请求中使用变量

在构建请求 URL 或者请求体时,可以通过{{variableName}}的形式使用环境变量。比如你在环境中定义了一个变量 host,host 里面的值就是 API 的域名,比如 localhost:8080,你在接口中引用的时候,可以直接引用定义的变量,例如:

bash 复制代码
{{host}}/api/v1

3.在脚本中动态设置环境变量

假设第一个请求返回了一个需要在后续请求中使用的资源 ID,你可以在第一个请求的 Tests 脚本中添加代码来更新环境变量,比如接口返回的响应数据结构如下所示:

css 复制代码
{
    "code": "0",
    "data": {
        "id": "5280"
    },
    "message": "success"
}

那么你的 Tests 脚本可以写成下面这样,其中NAME_ID就是将返回的 id 获取到之后,存储到环境中的环境变量。

ini 复制代码
var body = pm.response.json();

var NAME_ID = body.data.id;

console.log("NAME_ID:" + NAME_ID);

pm.environment.set("NAME_ID", NAME_ID);

发送请求后,Postman 会自动将其提取到环境变量中。

4.使用环境变量

只要在环境变量中有数据,那么就可以通过 {{}}来引用这个环境变量,这样就能达到接口间传递数据的目的。例如上面的 id 获取到之后,就可以在接口的参数中使用,它可能是这样的:

bash 复制代码
{{host}}/pet/{{NAME_ID}}

也可能是这样的:

bash 复制代码
{{host}}/pet?id={{NAME_ID}}

如果将你一个 token 凭证存储在了环境变量中,比如下面这样:

token 凭证一般用来鉴权,我们希望这个 token 凭证在发送请求的时候能够自动携带在接口上,因为我们不可能一条接口一条接口的来引用这个 token,这样太麻烦了。要作用于全局接口,你可以在集合中设置,如下图所示,这样这个集合下的接口在发送请求时,就会携带这个 token 凭证。

有一点要注意,在集合中设置了鉴权的 token 后,在接口中需要选择"Inherit auth from parent",也就是继承父级(继承自集合中设置的 token),不然不会生效的。

利用全局变量进行数据共享

全局变量的使用方法类似于环境变量,不过它们在任何环境下都可用。适用于那些在多个环境之间共享的数据。设置全局变量的方法如下:

python 复制代码
pm.globals.set("variableName", value);

集合变量的应用

集合变量适用于仅在特定 Postman 集合中共享数据的场景。在集合的"编辑"菜单中,你可以添加和管理这些变量。这些变量同样通过{{variableName}}的形式在请求中使用,使用方法跟环境变量是一样的,就是作用的范围不一样。

局部变量的使用

局部变量或临时变量非常适合存储仅在当前请求或脚本执行期间需要的数据。它们不会被永久保存在 Postman 中,也不会对其他请求或环境产生影响。设置局部变量如下:

c 复制代码
pm.variables.set("variableName", value);

总结

通过合理使用 Postman中的变量类型,可以实现数据在不同请求间的有效传递和共享。这不仅可以提高测试的灵活性和效率,也有助于模拟复杂的 API 交互场景。在实际开发和测试工作中,掌握这些技能将非常有用。

更多内容可以学习《测试人的 Python 工具书》书籍《性能测试 JMeter 实战》书籍

相关推荐
aoi15 小时前
如何让 Playwright 自动化测试的显示鼠标?—— 注入式 Mouse Helper 实践
测试
晚风吹长发21 小时前
探索软件测试——用例篇
大数据·linux·服务器·压力测试·测试·测试方法
刘棕霆1 天前
企业测试造数为什么这么难?我把熟手经验做成了一个可交付的造数 Skill
aigc·agent·测试
一孤程1 天前
AI辅助测试用例生成实战——用大模型把测试设计效率提升300%
人工智能·测试工具·ai·aigc·测试用例·测试·测试覆盖率
不能只会打代码2 天前
Day 002 — Python 工程化 & FastAPI & 数据库速通
数据库·redis·python·docker·fastapi·测试
狂师2 天前
还在手写测试报告?推荐一款 AI 测试Skill:只需一句指令,自动生成专业定制化测试报告!
人工智能·测试·全栈
xixingzhe23 天前
软件开发测试分层与CI/CD、沙箱使用完整指南
ci/cd·测试
ClouGence3 天前
8 款好用的 Web 自动化测试工具大盘点:怎么选、适合谁?
selenium·测试
狂师3 天前
测试人员必备:推荐一款智能测试数据清理AI Skill,支持db、redis、mq等
数据库·aigc·测试
ckjoker4 天前
让AI给AI当法官:手敲LLM-as-a-Judge评估系统,25次调用跑出最弱维度
llm·agent·测试