Postman 大更新很多次了,原内容过时咯,把大部分编辑掉避免误导,只保留链接
以下全是我编的,编不下去就删掉咯……
可能是目前最好用的 web 接口调试工具
毕竟调试小工具出身,算不上成熟的自动化测试框架,又有 GUI 的拖累,有些东西绕个圈能实现但很丑,如:
有些该有的功能目前还不支持,如:
另外 Postman 运行在沙盒里,Newman 虽然基于 Node.js,但一套脚本 2 边共用决定了功能不能差太远,因此无法做到:
如果要深入使用,团队里最好有人会 Node.js,把 Newman 封装一下
brew cask postman
否则:
https://www.getpostman.com/apps
推荐 macOS/Windows/Linux 桌面 app
不推荐现在还用 Chrome app,除了下载要 ***,浏览器的沙盒有更多限制
不管中文还是英文的教程都比较过时了,容易误导人,建议直接读官方文档,2 个小时就能过一遍
接口测试工具 postman, 2016-09-01(基于 Chrome 版的 Postman,和桌面版大同小异)
[API 测试] postman, 2016-02-29
API 自动化测试利器——Postman, 2015-09-26(教程里的版本比较旧了,但还是讲得不错)
How to write powerful automated API tests with Postman, Newman and Jenkins, 2015-09-03
How to write automated tests for APIs using Postman – Part 1, 2014-03-07
How to write automated tests for APIs with Postman – Part 2, 2014-04-17
Writing automated tests with Postman – Part 3, 2014-05-09
- 有些早期文章会提到 Jetpack,曾经收 10 美元,现在成了 Postman 自带的 Collection Runner,可以批量执行用例
Making the perfect HTTP request using Postman Echo, 2015-11-13
Conditional Workflows in Postman, 2016-03-23
Generate Spotify Playlists using a Postman Collection, 2016-11-09
CurencyCloud 的Postman 集合和使用说明
以上全是我编的,我实在编不下去了……
最近这几个月在用 postman(其实多半是命令行版的 newman)做接口测试,一开始用它的真正理由就 1 个:老大已经钦定了
用下来感觉一般般,踩平了一堆坑,在 github 给作者提了 5 个 issue,后来又用 nodejs 写了个 wrapper 简单封装了一下 newman
现在准备把整套东西交给功能测试的同事,把笔记和心得整理一下发出来抛砖引玉
总的来说,这个优秀的调试工具用来做自动化测试给人的感受就是 “渣,但不比其他任何框架更渣”
虽然还不能做到开箱即用,无奈亮点真的很亮,而且一直越变越好,潜力很大,后续还是很看好它的
这篇东西非常入门向,还停留在用 UI 发请求,连 newman 都没涉及
迟些整理下放出 newman 篇和自己的 wrapper 的一点点心得
用的是 es6?帖子写的不错,postman 用来做大规模接口测试,就像 jmeter 一样,感觉有点奇淫技巧
#5 楼 @Lihuazhang
嗯 例子都是 es6 既然底层是 v8 引擎 肯定选更顺手的写法 :)
刚打算休息天学习下接口测试,一打开 testerhome 就看到这篇帖子,有缘~先收着学习了~
#6 楼 @keithmork 请问下 “有没有用手机测试时挂代理录请求的习惯” 这个有啥坏处?
新手报到
好文,期待结合 newman 的分享。好像还可以做到 jenkins+newman+postman 一套的接口自动化实现。
#10 楼 @qq329999897
嗯 目前是这么用的
其实那些测试数据就这么分散在各个 html 报告文件里太浪费,newman 有 npm 包和提供了一些接口,可以写代码调用的,跑完测试可以把想要的数据存进 mongodb 里
赞、最近也开始用 postman 做接口测试
之前是自己写 python 读写 excel 来测接口、老大希望前端开发自己也能用来测接口数据、就开始用 postman 了
想实现自动化、还在研究中
先马住
问个问题:已经在浏览器开启了 interceptor,postman 中的卫星也打开了,但是在 postman 的 history 中没有自动捕获 chrome 的操作记录。这是什么原因呢?已试过重装,但是没有用
@keithmork ,多谢你的分享。这是我看到的关于 postman 的最详细的介绍,给了我很多有用的信息。使用 postman 约 10 天了,基本能用上了,很是期待你的下一篇分享。
#15 楼 @zxd2010112123
浏览器代理设了没?比如都是本机就填本机 ip 和 postman 里你设置的端口(默认 5555)
楼主这篇文章很好,我是接口新手,我在使用 postman,一直没解决一个问题。
请问,如何将图一 request 的 “phone” 参数,自动填充到图二 request 的 “phone” 参数里去?
请求方式是 post,请求体为 json 格式。
1.需要在哪里定义脚本调用吗?
2.脚本的定义格式是如何的?
这个问题让我在 run collection 时出现很多 fail?
麻烦楼主以及懂的朋友赐教,非常感谢
图一:
图二:
#18 楼 @tangtest4 你这个号码既然是写死的,可以搞成环境变量吧?
#20 楼 @keithmork
可以把它搞成环境变量,我可以在 Pre-request Script 定义一个随机号码,这样它就不写死。
但问题是我不知道 Test 里怎么去设置 request 的参数为环境变量?
#21 楼 @tangtest4 在 pre-request 里就可以设环境变量的,方法一样
比如 phone 是你的随机号码的变量,环境变量也起一样的名字,那就postman.setEnvironmentVariable('phone', phone);
如果一定要在 test 里取请求参数里填的东西,像这里传 JSON 字符串就用JSON.parse(request.data).phone
如果是 form 就用request.data.phone
谢谢你的问题,我更新一下原帖,放在提取接口返回值下面一点:)
#22 楼 @keithmork 非常感谢,一语中的,非常喜欢你 postman 这个文章,感谢感谢
喜欢
你好,我在 Tests 中 postman.setEnvironmentVariable 设置了一个 uuid 的变量,直接通过 postman 发送请求,就可以设置成功;
如果通过 Newman 运行,该变量值设置的就是 undefined;所以运行一直失败,求大师指导
你好,想问一下,postman 可以做并发测试吗?并发量不大的,几十个吧
#26 楼 @hw_ 它是同步发请求的,没有并发,服务器都是串行处理
简单点可以用腾讯这网页测 http://wetest.qq.com/gaps/
复杂点可以用 jmeter
postman 怎么获取登录的 token 传给下一个用例使用?
第二个用例里面怎么用第一个的登录 token
#30 楼 @396266318 想从某个接口的返回数据里提取东西要在tests
里写,先解析 json 字符串,拿到需要的属性再设为环境变量
比如
let json = JSON.parse(responseBody);
postman.setEnvironmentVariable('token', json.data);
之后就可以在下一个请求参数传{{token}}
了
(我这里偷懒省了 try catch
token 和 json 是随你取的变量名,data 是你返回值里的字段名,responseBody
(字符串) 是 Postman 的全局变量
#17 楼 @keithmork 是没有录入浏览器的操作。现在已经解决了。谢谢
@keithmork 还是不可以哦!
可以加下你的 QQ 吗?我的 QQ 396266318
@keithmork 楼主,我有个小问题请教一下,Tests 里面可以断言 responseBody 的参数吗?
tests[[INFO] Request params: ${JSON.stringify(request.data)}
] = true; // 显示所有请求参数
那么请问怎么显示所有 responseBody 参数?
tests[[INFO] responseBody params: ${JSON.stringify(responseBody.data)}
] = true 这个吗?
最近在研究 postman,感觉快入门了,不过有个问题一直无法突破,特来求教:
如下图,post 时需要带 body,参数名为 “tid”,我建了个变量 “ttid”,这个 tid 是递增的数字,需要做的是一直测试一个 tid,如果 fail 则一直测这个 tid,如果通过则将 tid+1,然后测 “tid+1” 这个,请问这样的问题该如何实现?谢谢!
你好,我想问一下,,怎么让返回的值参数化验证,比如我传 1,返回是 10,传 2 返回 20,怎样在 test 里写验证传不同的指会返回不同对应的值呢
你好, 看到 postman 官方提供的 api: postman.setNextRequest, 这个 api 说的是可以将文件夹串行? 我有以下场景:
6 个文件夹: a,b,c,d,e,f. 每个文件夹中有 4 个以上的用例 (增删改查等). 因为系统设计是一个树状的结构, 所以从 a 到 f 有依赖关系, 分别是父子关系, 所以我想在每一个文件夹内组织好用例的顺序 (也就是实际运行顺序?), 然后在每一个文件夹的最后一个用例的 Test 中写上 postman.setNextRequest('下一个文件夹的第一个用例的名称'); 想这样串行来自动化测试接口, 不知道行不行?
希望得到您的回复.
#38 楼 @butterfly5211314 应该不行,这接口针对请求的,写死请求的名字调用
目前想不同文件夹按顺序执行似乎只能靠名字排序了,比如 001_xxx, 002_xxx,但这样以后你想在中间插几个或调整顺序就要改名,挺麻烦
如果在用 newman 的话干脆保存成不同集合文件,在 shell 脚本里自己控制测试顺序
【2017-07-26 更新】最新版支持文件夹排序和多级文件夹了
#39 楼 @keithmork 你的意思是说文件夹执行顺序是按名称排序的吗?
#39 楼 @keithmork 那这个 setNextRequest 的作用在哪里呢? 有点不明白了.
#41 楼 @butterfly5211314 就是同一文件夹下面,用这方法可以用名字指定你想要的接口执行,比如又回到前面跑过的再跑一次……目前也就这点可怜的流程控制功能了
我的用法是在有些地方失败之后再来一次,例如随机的用户名注册,如果碰巧注册过了就重来。这种断言要稍微多处理点情况,比如几次重试用光之前不能算断言失败啊之类
@keithmork responsebody 返回一个 list,想把 list 的某个元素保存到环境,以便后面的 cases 调用做传参数,这个一直没弄好(麻烦高告知下,像图里要把 productstoreID 作为环境变量)
先把你的 response json 格式化,然后通过 json 方式去获取你要的 value 就可以了,如下:
//将response格式化成json
var jsonData = JSON.parse(responseBody);
if(cart in jsonData){
//获取返回值中productStoreId对应的value值
var pSId = jsonData.cart.productStoreId;
//将pSId保存到环境变量productstoreID中
postman.setEnvironmentVariable("productstoreID", pSId);
}
以上供参考,其它的判断自己看着加吧
恩谢谢你,
我当初提出这个问题是自己没去研究
后来自己去研究了下,已经明白 list 和数组的参数,在 postman 的环境取值方式了
加油
楼主,我是 44,有个小问题需要请教您:
postman 里在 test 模块,怎么把 responsebody 里某个指定参数,跟环境变量里的某个指定参数(上个请求 requestbody 里的某个参数设置在环境变量里)做断言??
新手入门,想请教一个问题,如果 想获取 body 填的所有请求参数及值,如果获取??
老哥,现在还在玩 Postman 么?