变量
Postman 支持变量引用,方便统一集中维护管理。
比如有许多个请求 http://127.0.0.1:8080/xxx/xxx 用的是本地127.0.0.1:8080环境,当想去连接线上环境测试接口的时候,就得一个一个的更改 host 了,当拥有几十上百个请求时就会很痛苦。
此时就可以使用变量来维护 host 的值了,只需要变量里面维护变量值即可,一处维护,处处引用,跟代码里面的魔法值的处理是一样的
变量作用域
Postman 支持以下变量作用域范围:
- Global:全局变量
- Collection:集合变量
- Environment:环境变量
- Data:数据变量
- Local:局部变量
图片中作用域生效为越里面的优先级会越高,及同名变量内围的会覆盖外围的,例如有一个全局变量和一个环境变量都命名为username,则在请求时将使用环境变量运行。
以下示例中 Demo env 环境覆盖了全局变量里的 username
全局变量
适用于所有集合,所有请求都可以用的变量
集合变量
适用于仅当前集合可用
环境变量
环境变量与全局变量类似,只不过可以选择当前环境,适合有环境区分
No environment 时可以添加环境
添加完成后可以选择不同的环境来执行请求,比如本地环境和开发环境的请求
其它
局部变量
即 Pre-Request Script 和 Tests 中的本地变量
数据变量
Runner 中的变量,用于提供自动化测试用例数据
动态变量
Postman 内置了许多动态变量,以用于在请求中使用。当想要在同一个请求中提供不同的参数时,则可以使用动态变量,也就是使用随机参数来构造不同的 Mock 数据来测试接口。
示例
正常请求
{
"title": "{{$randomWords}}", // 随机单词
"description": "{{$randomLoremSentence}}", // 随机句子,randomLoremSentences 多条语句
"content": "{{$randomLoremParagraph}}" // 随机段落,randomLoremParagraphs 多个段落
}
右侧生成代码也会立刻执行随机生成参数
完整示例如下所示:
randomLoremParagraphs 等类似的变量会有换行,发送请求的适合没有转义,因此后端服务可能会报特殊字符序列化的错误
在 pre-request scripts 和 test scripts 中使用
在 Pre-Request script 和 test script 中也可以使用动态变量。
pm.variables.replaceIn()
例如:
var body = {
"title": pm.variables.replaceIn('{{$randomWords}}'),
"description": pm.variables.replaceIn('{{$randomLoremSentences}}'),
"content": pm.variables.replaceIn('{{$randomLoremParagraphs}}')
}
console.log(body)
Pre-request Script
在 Postman 的 Pre-request Script 中可以使用预请求脚本在请求运行之前执行自定义 JavaScript 脚本,可以执行预处理,例如设置变量值、参数、标头和正文数据;还可以使用预请求脚本来调试代码,例如通过将输出记录到控制台。
同时侧边栏提供了常用指令的快捷操作
示例
有一个文章删除接口需要自测,希望能够在每次调用之前都初始化一篇新文章用于测试,以防干扰其它数据。
此场景即可使用 Pre-request Script 来实现。
URL 中路径变量 {{articleId}} 会从当前环境变量获取对应的变量值,因此只需要在创建文章后将文章 ID set 到环境变量中即可。
var body = {
"title": "demo article title",
"description": "this is description",
"content": "this is content"
}
// 构造 Post 请求
const regRequest = {
url: `http://127.0.0.1:8080/article/save`,
method: 'POST',
header: [
'Content-Type: application/json',
// 获取token,放入请求头
`Token: ${pm.collectionVariables.get("token")}`
],
body: {
mode: 'raw', // 使用raw(原始)格式
raw: JSON.stringify(body) //要将JSON对象转为文本发送
}
};
pm.sendRequest(regRequest, function (err, response) {
var id = response.json().data;
// 将结果设置为当前 Collection 下的环境变量
pm.collectionVariables.set("articleId", id);
});
完整演示
导入导出
Postman 可以从 cURL 文本中快速导入一个请求,以方便用于测试和快速复现接口的问题。
curl --location --request POST 'http://127.0.0.1:8080/article/save' \
--header 'Content-Type: application/json' \
--data-raw '{
"title": "24/365 plum Roads",
"description": "Doloribus et deleniti tempora nobis sint et aut debitis.",
"content": "Ipsum ex iste. Et fugit eum sed sed aliquam et ducimus. Voluptas deleniti molestias quam iure aut cumque aut incidunt. Voluptatibus est fugiat magni enim eum voluptates qui iusto dolorum. Et occaecati libero laboriosam id impedit ea unde quia est. Exercitationem voluptatem et numquam et pariatur est ea recusandae."
}'
可以看到 Postman 的 Import 窗口中还有其它类型的 import 请求的方式,File、Folder、Link 等。
- File:从接口定义文件中导入接口(单个文件,多个接口)
- Folder:扫描文件夹中所有接口定义文档(多个文件,多个接口)
- Link:从请求链接中导入接口(单个文件,多个接口)
- Raw Text:从 cURL 文本中导入请求(单个接口)
- Codes Repository:扫描代码仓库中的所有接口定义文档
Postman 支持 OpenApi 3.0 规范,因此可以导入符合 OpenApi 3.0 规范的接口文件
示例
在后端中常用的接口文档一般是 Swagger,目前 Swagger 最新版本为 3.0, 是支持 OpenAPi 3.0.3 规范的,因此可以在 Postman 中导入接口文件,实现批量导入接口。
Swagger 的 Api-docs 即为接口定义数据,因此可以直接导入该文件数据。
链接导入
接口文件的导入会生成两块内容,一是 API,接口定义草案(draft);二是 Collection,实际的请求。
同时可以看到自动设置了base_url参数
文件和文件夹导入
将 http://127.0.0.1:8080/v3/api-docs 的数据 ctrl + s 保存至 api-docs.json 文件中,导入时选择该文件或者该文件的父文件夹(文件夹导入)即可,拖拽文件之窗口中也可以。
代码仓库的导入就不尝试了,大同小异,可能就是多了要认证授权的操作
其它
Postman 本身的接口信息是可以导出的,因此可以在不同电脑上的 Postman 进行导入导入。
导出为 Postman 本身的接口文件定义,导入依然是文件导入,因为符合 OpenApi 3.0
建议登录后使用工作空间,以适用于团队间协作,登陆后还支持跨设备同步数据,很方便。
参考
Using variables | Postman Learning Center
Using dynamic variables | Postman Learning Center
Dynamic variables | Postman Learning Center 常用动态变量请参考此处
Postman 版本为 9.1.x