基础操作
请求参数
- 在Params标签下添加参数
- 在url中输入类型
:param
格式定义pathVariable - 右击参数值, 可以对其进行转码, 点击Params右侧的Settings可以设置该请求默认进行参数值码
- 点击Bulk Edit可以更改参数编辑展示方式, 编辑起来更方便
响应对象
查看响应对象
可以按不同方式查看响应对象, 格式化后/纯文本的/预览等, 还可以查看本请求的网络信息, 请求耗时, 响应体大小
响应示例
可以将某次的响应内容保存起来, 作为样例(或者保存到文件), 从而能随时查看比如 正常响应/异常响应 是什么样子, 这在服务无法访问时挺有用. 另外如果在Postman里定义Mock服务的话也会用到.
定义响应示例名称
点击右上角查看响应示例
请求组
可以将多个请求保存到一个请求组(Collections)中, 好处是: 增加额外Collection变量作用域, 增加公共的PreRequest和Test脚本, 批量执行Collection下的请求, 定义Collection内请求的顺序
点击左上角New > Collection, 或者点击请求路径右边的Save, 保存请求的同时创建Collection
Collection下还可以新建文件夹, 对请求进一步划分, 比如: 用户模块, 订单模块…
环境
同一个接口, 在不同的环境都有服务, 比如: 研发环境, 测试环境, 线上环境, 环境不同参数值可能有不同, 比如: 研发环境服务ip为127.0.01, 测试环境服务IP为172.31.11.12, 线上环境为www.test.com, 此时可以先定义好环境数据, 然后在不同环境下定义同名变量, 但变量值不同. 实际发送请求前, 选择不提供的环境, 这样变量值就会更新.
点击左上角New > Environment 新建环境, 也可以点击右上角Manager Environments新建
设置变量值
这里需要区分一下INITIAL VALUE 和 CURRENT VALUE, INITIAL VALUE 就是在定义该变量时赋予的初始值, 这个值会同步到Postman服务器, 而CURRENT VALUE是发送请求时实际被使用变量值, 默认与INITIAL VALUE 的值相同, 但不会同步到Postman服务. 对于一些敏感数据(比如密码)不应该设置INITIAL VALUE.
INITIAL VALUE用作团队合作时定义一个初始值, CURRENT VALUE适合运行时根据实际情况去调整
可以点击小眼睛按钮快速查看Global和当前环境的变量列表
调用请求时在环境选择下拉菜单中选择需要的运行环境就可以了
变量
可以在不同作用域定义好变量后, 在某个请求中引用该变量, 从而做到变量复用和统一管理
可以直接接url上使用变量, 也可以在请求参上使用, 格式是, 这里变量名可以是手动定义的变量名, 也可以是动态变量名(如:
随机数字)
变量作用域
postman中变量有多个作用域, 越往内的作用域优先级越高(global < collection < environment < …), 举例来说, 如果global作用域和Environment作用域里都有一个变量叫username
, 那么最终使用的是Environment作用域里的变量值.
管理变量
可以基于现有数据定义变量
依次点击Set as variable > Set as a new variable.
输入变量名, 确认变量值, 选择作用域
管理global和environment作用域变量
点击环境下拉菜单旁边的眼镜按钮, 在弹出层中点击edit进行编辑
点击旁边的齿轮按钮, 可以创建/删除/编辑运行环境配置, 点击某个运行环境项后, 可以对其下的变量进行管理
管理collection作用域的变量
在左侧collections列表中, 点击collection右侧的 … > Edit > Variables, 然后就可以对变量进行管理了
在脚本中操作变量
1 | // 读取 |
请求时使用变量
在发送请求时, 使用的格式获取变量值, 使用动态变量的方式是
data作用域变量操作
点击左上角的Runner按钮, 在弹出页面中选择要执行collection, 点击Select File按钮, 注意文件必须是JSON或者CSV格式, json文件样例如下
1 | [{ |
另外, 在脚本里访问data文件需要使用iterationData
对象, 脚本样例如下
1 | pm.iterationData.get("value") |
脚本
脚本执行顺序
执行每个请求时会依次执行如下脚本:
- Collection级别的pre-request脚本
- Folder级别的pre-request脚本
- Request级别的pre-prequest脚本
- Request级别的test脚本
- Folder级别的test脚本
- Collection级别的test脚本
如果对应的脚本没有定义, 则会跳过. Collection和Folder级别的脚本在执行每个请求时都会被调用, 所以适合写一些需要复用的逻辑.
Collection或Folder脚本编辑入口是点击右侧的”…”, 在弹出参数中点击”edit”
Test脚本
test脚本用于对请求结果进行验证处理, 比如: 判断响应码是否为200, 保存请求结果到本地文件等
1 | pm.test("响应码验证", function(){ |
发送请求之后, 在Tests Results标签下就能看到测试结果
常用脚本代码
前置脚本
- 操作变量
1 | // 设置全局变量 |
- 读取/修改接口请求信息
1 | // ================= URL =================== |
后置脚本
1 | pm.test("响应状态码为200", function () { |
常用断言
1 | // response assertions 示例 |
脚本里发送请求
1 | pm.sendRequest('https://postman-echo.com/get', (error, response) => { |
在Runner中运行collection下的请求时, 可以通过postman.setNextRequest(请求名)
或者 postman.setNextRequest(请求id)
来指定下一个请求, 这样可以构建起一个调用工作流, 比如先请求数据列表接口, 然后从响应中获取数据id, 再请求数据详情接口.
其他示例
1 | // Decode base64 数据 |
API
PM对象
info属性
pm.info
对象包含了接口(或测试集)运行的相关信息。
1 | // 当前执行是什么类型的脚本:前置脚本(prerequest),或后置脚本(test)。 |
variable属性
pm.variables
用来对变量进行管理
1 | // 检查是否存在某个临时变量。 |
request response cookies属性
1 | // ------------ request对象 -------------- |
pm.expect
1 | pm.expect(assertion:*):Function → Assertion |
Postman使用 Chai Assertion Library BDD库提供的 断言语法 进行验证
该方法用来断言 response
或 variables
里的数据非常有用,更多关于 pm.expect
断言的是示例,可以点击这里查看:Assertion library examples
1 | // 链式调用, 增加可读性 |
####
Response 对象可用的断言 API 列表
pm.response.to.have.status(code:Number)
pm.response.to.have.status(reason:String)
pm.response.to.have.header(key:String)
pm.response.to.have.header(key:String, optionalValue:String)
pm.response.to.have.body()
pm.response.to.have.body(optionalValue:String)
pm.response.to.have.body(optionalValue:RegExp)
pm.response.to.have.jsonBody()
pm.response.to.have.jsonBody(optionalExpectEqual:Object)
pm.response.to.have.jsonBody(optionalExpectPath:String)
pm.response.to.have.jsonBody(optionalExpectPath:String, optionalValue:*)
pm.response.to.have.jsonSchema(schema:Object)
pm.response.to.have.jsonSchema(schema:Object, ajvOptions:Object)
pm.response.to.be.*
pm.response.to.be
是用来快速断言的一系列内置规则。
pm.response.to.be.info
检查状态码是否为
1XX
pm.response.to.be.success
检查状态码是否为
2XX
pm.response.to.be.redirection
检查状态码是否为
3XX
pm.response.to.be.clientError
检查状态码是否为
4XX
pm.response.to.be.serverError
检查状态码是否为
5XX
pm.response.to.be.error
检查状态码是否为
4XX
或5XX
pm.response.to.be.ok
检查状态码是否为
200
pm.response.to.be.accepted
检查状态码是否为
202
pm.response.to.be.badRequest
检查状态码是否为
400
pm.response.to.be.unauthorized
检查状态码是否为
401
pm.response.to.be.forbidden
检查状态码是否为
403
pm.response.to.be.notFound
检查状态码是否为
404
pm.response.to.be.rateLimited
检查状态码是否为
429
动态变量
每次请求时, 如果希望自动生成一个值作为参数使用, 或者在脚本中使用, 这时可以使用PostMan内置的动态变量. Postman使用的是faker.js库来生成变量值, 这个库是支持生成中文随机数据的, 但是目前在Postman里支持英文随机数据.
使用方式如下, 实际请求时url就变成了https://gank.io/api/v2/banners?testId=107
:
在脚本中的使用方式是pm.variables.replaceIn('')
通用
变量名 | 说明 | 示例 |
---|---|---|
$guid | guid | “611c2e81-2ccb-42d8-9ddc-2d0bfa65c1b4” |
$timestamp | 时间戳,秒 | 1562757107 |
$randomUUID | UUID | “6929bb52-3ab2-448a-9796-d6480ecad36b” |
文本数字颜色
变量名 | 说明 | 示例 |
---|---|---|
$randomAlphaNumeric | 单字符数字 | 6, “y”, “z” |
$randomBoolean | 布尔 | true, false |
$randomInt | 数字, 1到1000 | 78 |
$randomColor | 颜色 | “red”, “fuchsia”, “grey” |
$randomHexColor | 颜色 | “#47594a”, “#431e48” |
$randomAbbreviation | 随机缩写 | SQL, PCI, JSON |
网络
变量名 | 说明 | 示例 |
---|---|---|
$randomIP | ip地址 | 241.102.234.100 |
$randomIPV6 | ip地址V6 | dbe2:7ae6:119b:c161:1560:6dda:3a9b:90a9 |
$randomMACAddress | mac地址 | 33:d4:68:5f:b4:c7 |
$randomPassword | 密码 | t9iXe7COoDKv8k3, QAzNFQtvR9cg2rq |
$randomLocale | 两字符 | “ny”, “sr”, “si” |
$randomUserAgent | 浏览器UA | Mozilla/5.0 (Macintosh; U; Intel Mac… |
$randomProtocol | 协议 | “http”, “https” |
$randomSemver | 随机版本号 | 7.0.5, 2.5.8, 6.4.9 |
姓名
变量名 | 说明 | 示例 |
---|---|---|
$randomFirstName | 名 | Ethan, Chandler, Megane |
$randomLastName | 姓 | Schaden, Schneider, Willms |
$randomFullName | 全名 | Sylvan Fay, Jonathon Kunze |
$randomNamePrefix | 前缀 | Dr., Ms., Mr. |
$randomNameSuffix | 后缀 | I, MD, DDS |
职业
变量名 | 说明 | 示例 |
---|---|---|
$randomJobArea | 地区 | Mobility, Intranet, Configuration |
$randomJobDescriptor | 描述 | Forward, Corporate, Senior |
$randomJobTitle | 职称 | International Creative Liaison |
$randomJobType | 类型 | Supervisor, Manager, Coordinator |
电话地址
变量名 | 说明 | 示例 |
---|---|---|
$randomPhoneNumber | 电话 | 700-008-5275 |
$randomPhoneNumberExt | 电话12位 | 27-199-983-3864, |
$randomCity | 城市 | Spinkahaven, Korbinburgh |
$randomStreetName | 街道 | Kuhic Island, General Street |
$randomStreetAddress | 地址 | 5742 Harvey Streets |
$randomCountry | 国家 | Lao People’s Democratic Republic, Austria |
$randomCountryCode | 国家代码 | CV, MD, TD |
$randomLongitude | 经度 | 171.7139, -159.9757 |
$randomLatitude | 纬度 | 55.2099, 27.3644 |
图片
金融
变量名 | 说明 | 示例 |
---|---|---|
$randomBankAccount | 8位数字的银行账号 | 09454073, 65653440, 75728757 |
$randomBankAccountName | 银行账号名 | Home Loan Account, Checking Account, Auto Loan Account |
$randomCreditCardMask | masked credit card number | 3622, 5815, 6257 |
$randomBankAccountBic | 银行标识 | EZIAUGJ1, KXCUTVJ1, DIVIPLL1 |
$randomBankAccountIban | 15-31位国际银行账户号码 | MU20ZPUN3039684000618086155TKZ |
$randomTransactionType | 交易类型 | invoice, payment, deposit |
$randomCurrencyCode | 3个字符的货币标识 | CDF, ZMK, GNF |
$randomCurrencyName | 货币名称 | CFP Franc, Cordoba Oro, Pound Sterling |
$randomCurrencySymbol | 货币符号 | $, £ |
$randomBitcoin | 比特币地址 | 3VB8JGT7Y4Z63U68KGGKDXMLLH5 |
商务
变量名 | 说明 | 示例 |
---|---|---|
$randomCompanyName | 公司名 | Johns - Kassulke, Grady LLC |
$randomCompanySuffix | 公司后缀 | Inc, LLC, Group |
$randomBs | 商业用语 | killer leverage schemas |
$randomBsAdjective | 商务用语形容词 | viral, 24/7, 24/365 |
$randomBsBuzz | 商业流行语 | repurpose, harness, transition |
$randomBsNoun | 商业用词 | e-services, markets, interfaces |
流行语
变量名 | 说明 | 示例 |
---|---|---|
$randomCatchPhrase | 流行语 | Future-proofed heuristic open architecture |
$randomCatchPhraseAdjective | 流行语形容词 | Self-enabling, Business-focused, Down-sized |
$randomCatchPhraseDescriptor | 流行语描述 | bandwidth-monitored, needs-based, homogeneous |
$randomCatchPhraseNoun | 流行语名词 | secured line, superstructure,installation |
数据库
变量名 | 说明 | 示例 |
---|---|---|
$randomDatabaseColumn | 字段名 | updatedAt, token, group |
$randomDatabaseType | 字段类型 | tinyint, text |
$randomDatabaseCollation | 字符集 | cp1250_bin, utf8_general_ci, cp1250_general_ci |
$randomDatabaseEngine | 数据库引擎 | MyISAM, InnoDB, Memory |
日期
变量名 | 说明 | 示例 |
---|---|---|
$randomDateFuture | 未来日期 | Tue Mar 17 2020 13:11:50 GMT+0530 (India Standard Time) |
$randomDatePast | 过去日期 | Sat Mar 02 2019 09:09:26 GMT+0530 (India Standard Time) |
$randomDateRecent | 最近时间 | Tue Jul 09 2019 23:12:37 GMT+0530 (India Standard Time) |
$randomWeekday | 星期 | Thursday, Friday, Monday |
$randomMonth | 月份 | February, May, January |
网站
变量名 | 说明 | 示例 |
---|---|---|
$randomDomainName | 域名 | gracie.biz, armando.biz, trevor.info |
$randomDomainSuffix | 顶级域名 | org, net, com |
$randomDomainWord | 非法域名 | gwen, jaden, donnell |
$randomEmail | 邮箱 | Pablo62@gmail.com, Ruthe42@hotmail.com |
$randomExampleEmail | “example”域名的邮箱 | Talon28@example.com, Quinten_Kerluke45@example.net |
$randomUserName | 用户名 | Jarrell.Gutkowski, Lottie.Smitham24, Alia99 |
$randomUrl | URL | https://anais.net, https://tristin.net, http://jakob.name |
文件目录
变量名 | 说明 | 示例 |
---|---|---|
$randomFileName | 文件名(包括不常见的文件类型) | neural_sri_lanka_rupee_gloves.gdoc |
$randomFileType | 文件类型(包括不常见的) | model, application, video |
$randomFileExt | 文件后缀(包括不常见的) | war, book, fsc |
$randomCommonFileName | 文件名(常见的文件类型) | well_modulated.mpg4 |
$randomCommonFileType | 常见的文件类型 | application, audio |
$randomCommonFileExt | 常见的文件后缀 | m2v, wav, png |
$randomFilePath | 文件路径 | /home/programming_chicken.cpio, |
$randomDirectoryPath | 目录路径 | /usr/bin, /root, /usr/local/bin |
$randomMimeType | MIME类型 | audio/vnd.vmx.cvsd |
商店
变量名 | 说明 | 示例 |
---|---|---|
$randomPrice | 价格, 100.00 到 999.00 | 531.55, 488.76, 511.56 |
$randomProduct | 商品 | Towels, Pizza, Pants |
$randomProductAdjective | 随机的产品形容词 | Unbranded, Incredible, Tasty |
$randomProductMaterial | 产品材料 | Steel, Plastic, Frozen |
$randomProductName | 商品名 | Handmade Concrete Tuna, Refined Rubber Hat |
$randomDepartment | 商业分类 | Tools, Movies, Electronics |
语法
变量名 | 说明 | 示例 |
---|---|---|
$randomNoun | 名词 | matrix, bus, bandwidth |
$randomVerb | 动词 | parse, quantify, navigate |
$randomIngverb | 现在进行时 “-ing” | synthesizing, navigating, backing up |
$randomAdjective | 形容词 | auxiliary, multi-byte, back-end |
$randomWord | 单词 | withdrawal, infrastructures, IB |
$randomWords | 多个单词 | Samoa Synergistic sticky copying Grocery |
$randomPhrase | 一句话 | You can’t program the monitor without navigating the mobile XML program! |
乱数假文
变量名 | 说明 | 示例 |
---|---|---|
$randomLoremWord | 一个假词 | est |
$randomLoremWords | 多个假词 | vel repellat nobis |
$randomLoremSentence | 一句胡话 | Molestias consequuntur nisi non quod. |
$randomLoremSentences | 2-6句胡话 | Et sint voluptas similique iure amet perspiciatis vero sequi atque. Ut porro sit et hic. Neque aspernatur vitae fugiat ut dolore et veritatis. Ab iusto ex delectus animi. Voluptates nisi iusto. Impedit quod quae voluptate qui. |
$randomLoremParagraph | 一段胡话 | Ab aliquid odio iste quo voluptas voluptatem dignissimos velit. Recusandae facilis qui commodi ea magnam enim nostrum quia quis. Nihil est suscipit assumenda ut voluptatem sed. Esse ab voluptas odit qui molestiae. Rem est nesciunt est quis ipsam expedita consequuntur. |
$randomLoremParagraphs | 3段胡话 | Voluptatem rem magnam aliquam ab id aut quaerat. Placeat provident possimus voluptatibus dicta velit non aut quasi. Mollitia et aliquam expedita sunt dolores nam consequuntur. Nam dolorum delectus ipsam repudiandae et ipsam ut voluptatum totam. Nobis labore labore recusandae ipsam quo. |
$randomLoremText | 一堆胡话 | Quisquam asperiores exercitationem ut ipsum. Aut eius nesciunt. Et reiciendis aut alias eaque. Nihil amet laboriosam pariatur eligendi. Sunt ullam ut sint natus ducimus. Voluptas harum aspernatur soluta rem nam. |
$randomLoremSlug | 假url | eos-aperiam-accusamus, beatae-id-molestiae, qui-est-repellat |
$randomLoremLines | 1-5行胡话 | Ducimus in ut mollitia.\nA itaque non.\nHarum temporibus nihil voluptas.\nIste in sed et nesciunt in quaerat sed. |
使用外部库
使用require
方法能够使用postman内置库, 包括:
- ajv
- atob
- btoa
- chai
- cheerio
- crypto-js
- csv-parse/lib/sync
- lodash
- moment
- postman-collection
- tv4
- uuid
- xml2js
除此之外, 一些NodeJS的模块可以使用:
1 | // 外部库调用示例 |