Postman工具使用
- Postman的优点
- 下载安装
- Postman 入门
- 发送第一个请求
- Postman 工作原理
- 发送不同类型请求
- 发送-Get请求
- 发送-POST请求
- 发送-PUT请求
- 发送-DELETE请求
- Request Header
- Response Header
- Postman接口授权设置
- Basic auth
- Digest Auth
- Hawk Auth
- OAuth 1.0
- Cookie设置
- postman 环境变量设置
- 环境变量
- 本地变量
- 全局变量
- 断言
- 状态码
Postman的优点
- 支持各种请求类型:get、post、put、patch、delete 等
- 支持在线存储数据,通过账号可以进行迁移数据
- 很方便的支持请求 header 和请求参数的设置
- 支持不同的认证机制,包括Basic、 Auth、Digest Auth、OAuth 1.0、OAuth 2.0 等
- 响应数据是自动按照语法格式高亮展示、包括HTML、JOSN 和 XML
下载安装
Postman 有Windows、Mac、LIunx以及Chrome插件版本。
- 下载地址:https://www.postman.com/downloads/
- 官方文档:https://learning.postman.com/docs/getting-started/introduction/
- Postman Api文档:http://docs/postman-echo.com
Postman 入门
发送第一个请求
1、启动软件后在引导页面点击Request,给Request命名,然后创建文件夹,并把Request归属到该文件夹。
2、在地址栏输入 postman-echo.com/get 然后点击Send按钮,可以看到返回值。如图展示:
Postman 工作原理
如图所示,在Postman中输入请求并单击Send按钮时,服务器将接收您的请求并返回Postman在接口中显示的响应。
① postman点击send发送请求给服务器②,
② 服务器响应,对数据进行处理,然后返回给postman
③ 对返回内容进行加工处理,把格式化后的内容显示出来
发送不同类型请求
发送-Get请求
HTTP GET 请求方法用于从服务器检索数据,数据由唯一的URL(统一资源标识符)标识。
GET请求可以使用 “Query String Parameters” 将参数传递给服务器。
http://postman-echo.com/get?param1=SJKJ¶m2=666666
请求说明
- param1和param2表示发送的参数
- ? 后面接参数
- & 连接多个参数
参数编辑
- 点击Params按钮,postman可以自动帮我们解析出对应参数①
- 如果想要暂时不传参数,可以勾选的方式去实现②
- 想要批量编辑参数,可以点击右上角的Bulk Edit 去实现批量编辑③
返回参数:
Body :返回体
- Pretty:格式化展示
- Raw:原始数据
- Preview:如返回有HTML,可以渲染网页
发送-POST请求
HTTP POST 请求方法旨在将数据创术到服务器,返回数据取决于服务器的实现,POST请求可以使用 “Query String Parameters” 以及body 将参数传递给服务器。
post四种传参方式
文件上传(form-data) : Content-Type:multipart/form-data
表单(x-www-form-urlencoded) : Content-Type-application /x-www-form-urlencoded
文本(raw) :
Content-Type:application/json
Content-Type:text/plain
Content-Type:text/html
Content-Type:application/javascript
Content-Type:application/xml
二进制(binary) :
Content-Type:application/octrent-stream
案例1:
使用 “Query String Parameters” 传递参数(支持,但是不常用)
http://postman-echo.com/post?param=SJKJ
返回值:
{
"args": {
"param": "SJKJ"
},
"data": {},
"files": {},
"form": {},
"headers": {
"x-forwarded-proto": "http",
"x-forwarded-port": "80",
"host": "postman-echo.com",
"x-amzn-trace-id": "Root=1-60b89ccf-0a0faf185d2291d9711eff5b",
"content-length": "0",
"user-agent": "PostmanRuntime/7.28.0",
"accept": "*/*",
"postman-token": "4fcd3fc9-4d73-40a0-8045-5ff0636efa14",
"accept-encoding": "gzip, deflate, br",
"cookie": "sails.sid=s%3A2FvWrz2RXmziLLUkk_gL7jAnkO7tKupA.XA0VmIbpWTwbx1kahpHv47EcQ9j7nW2Ud6JNv%2BBJl8k"
},
"json": null,
"url": "http://postman-echo.com/post?param=SJKJ"
}
案例2:
发送一个Request,其中body为 application/x-www-from-urlencoded 类型,参数分别为 param1=SJKJ 和 param2 = 888 请求url如下:
http://postman-echo.com/post
Postman Body数据类型说明
- form-data:是web表单用户传输数据默认编码,模拟了在网站上填写表单并提交,表单数据编辑器允许我们为数据设置键-值对。我们也可以为文件设置一个键,文件本身作为值进行设置。
- x-www-form-urlencoded:编码与URL参数中使用编码相同,只需输入键值对,就是application/x-www-from-urlencoded,会将表单内的数据转换为键值对。
- raw:请求可以包含任何内容,除了替换环境变量外,postman不触碰在编辑器中输入的字符串。可以上传任意格式的文本,可以上传text、json、xml、html等
- binary:相当于content-type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传图像、音频或视频文件,由于没有键值,所以,一次只能上传一个文件。
返回值如下:
{
"args": {},
"data": {},
"files": {},
"form": {
" param1": "SJKJ",
" param2": "8888"
},
"headers": {
"x-forwarded-proto": "http",
"x-forwarded-port": "80",
"host": "postman-echo.com",
"x-amzn-trace-id": "Root=1-60d2a44b-2a5084e44c8dc9a212a50a9a",
"content-length": "276",
"user-agent": "PostmanRuntime/7.28.0",
"accept": "*/*",
"postman-token": "7d4536bc-f774-4450-a80b-f27782d83750",
"accept-encoding": "gzip, deflate, br",
"content-type": "multipart/form-data; boundary=--------------------------144929740566030801503574",
"cookie": "sails.sid=s%3A0sfhPG8vOwR6DvIjUwmZZtSczrpXLY_l.uauV9yQ9WV274qFAU8sFlL5ThOgPv2WY2aX9t5VRRY8"
},
"json": null,
"url": "http://postman-echo.com/post"
}
发送-PUT请求
HTTP PUT请求主要是从客户端向服务器床送的数据取代指定的文档内容。
PUT请求可以使用Query String Parameters 以及body请求体将参数传递给服务器。
http://postman-echo.com/put
// PUT请求
http://postman-echo.com/put
案例
发送PUT请求,并传字符参数“hello 壮壮”
这里看put请求与post 跟get 请求没问么区别,是因为这里没有构造相关的数据,构造相关数据取请求,就可以明显的区别出来。
发送-DELETE请求
HTTP DELETE 方法用户删除服务器上的资源,DELETE请求可以使用Query String Parameters 以及body请求体将参数传递给服务器。
//DELETE 请求
http://postman-echo.com/delete
// 返回值
{
"args": {},
"data": {},
"files": {},
"form": {},
"headers": {
"x-forwarded-proto": "http",
"x-forwarded-port": "80",
"host": "postman-echo.com",
"x-amzn-trace-id": "Root=1-60d2a980-586ddb6a00cca5af40c50062",
"user-agent": "PostmanRuntime/7.28.0",
"accept": "*/*",
"postman-token": "dd34666f-3508-4737-92f3-ddefe38cdb12",
"accept-encoding": "gzip, deflate, br",
"cookie": "sails.sid=s%3A6hpv6suBOmB3dvdnspteG3UFkn4qQyDd.jPLjnGcooRs1cKboH%2F9Vw%2FHmrPiiWx2fChhYzCB032A"
},
"json": null,
"url": "http://postman-echo.com/delete"
}
Request Header
Request Header(请求头)用来说明服务器要是用的附加信息,比较重要的信息有Cookie、Referer、User-Agent等。在postman中可以在请求下方的Headers栏目来设置,
如下图:
Response Header
Response Header(响应头)其中包含了服务器对请求信息的答应信息,有Content-Type、Server、Set-Cookie等,在postman主界面下方的Headers或者postmanConsole界面都可以查看Response Header信息。
Postman接口授权设置
很多时候出于安全考虑,我们的接口并不希望对外公开,这个时候就需要使用授权机制(Authorization),授权过程验证是否有访问服务器所需的数据权限。当发送请求时,同城必须包含的参数,以确保请求具有访问和返回所需的数据权限。
postman支持的授权协议类型如下:
- No Auth
- Bearer Token
- Basic Auth
- Digest Auth
- OAuth 1.0
- OAuth 2.0
- Hawk Authentication
- AWS Signature
- NTLM Authentication
Basic auth
基本身份验证是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和对应的密码。
案例:请求URL如下,授权账号为:
- 用户名:postman
- 密码:password
- 授权协议 Basic auth
postman-echo.com/basic-auth
- 不输入用户名密码,直接使用get请求,则会返回 :Unauthorized
- 输入用户名密码,选择Basic auth授权类型,则会返回如下结果:
{
"authenticated": true
}
Digest Auth
Digest auth 是一个简单的认证机制,最初是为HTTP协议开发的,因此也常叫做HTTP摘要。其身份验证机制采用哈希加密方法,以避免用明文传输用户口令。摘要认证就是好核实参与通信的两方都知道双方共享的一个口令。
当server想要查证用户的身份,它产生一个摘要盘问(digest challenge),并发送给用户。典型的摘要盘问例如以下:
Digest realm="iptel.org", qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque="", algorithm=MD5
这里包含了一组参数,也要发送给用户,用户使用这些参数,来产生正确的摘要回答,并发送给server,摘要盘问中的各个参数,其意义如下:
realm(领域):领域参数是强制的,在全部的盘问中必须有。它的目的是鉴别SIP消息中的机密。在SIP实际应用,它通常设置为SIP代理server所负责的域名。
nonce(现实):这是由server规定的数据字符串,在每次产生一个摘要盘问时,这个参数都是不一样(与前面产生的不会雷同)。“实现”一般是由一些数据通过md5杂凑运算构造的。这种数据通常包含的时间标识和server的机密短语。这确保每一个“实现”都有一个有限的生命周期(也就是过了一些时间后会失效,并且以后再也不会使用),并且第一无二(即无论什么其他的server都不能产生一个同样的“现实”)。
algorithm(算法):这是用来计算的算法。当前仅仅支持MD5算法。
qop(保护的质量):这个参数规定server支持哪种保护方案。client能够从列表中选择一个值auth
表示仅仅进行身份验证,auth-int
表示进行查验外,另一些完整性保护。需要看更具体的米哦按写叙述,请参阅RFC2617。
案例
请求URL如下
postman-echo.com/digest-auth
摘牌配置信息如下:用户名密码和上面basic auth一样
Digest username="postman", realm="Users", nonce="ni1LiL0O37PRRhofWdCLmwFsnEtH1lew", uri="/digest-auth", response="254679099562cf07df9b6f5d8d15db44", opaque=""
执行请求结果如下:
{
"authenticated": true
}
Hawk Auth
Hawk Auth是一个HTTP认证方案,使用MAC(Message Authentication Code,消息认证码算法)算法,它提供了对请求进行部分加密验证的认证HTTP请求的方法。hawk方案要求提供一个共享对称密匙在服务器与客户端之间,通常这个共享的凭证在初始TLS(安全传输层协议)保护阶段建立的,或者是从客户端和服务器都可用的其他一些共享机密信息中获得的。
案例
请求URL如下:
https://postman-echo.com/auth/hawk
密钥信息如下:
- Hawk Auth ID: dh37fgj492je
- Hawk Auth Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn
- Algorithm: sha256
执行结果:
如果将key改为其他任意的字符则返回如下结果:
OAuth 1.0
OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
扩展资料:
案例
请求URL如下:请求方式为GET,Add authorization data to设置为:Request Headers
https://postman-echo.com/oauth1
参数配置为:
- Consumer Key: RKCGzna7bv9YD57c
- Consumer Secret: D+EdQ-gs$-%@2Nu7
发送请求结果如下:
如果Consumer Secret错误则返回如下结果:
Cookie设置
cookie是存储在浏览器中的小片段信息,每次请求后都将其发送回服务器,以便在请求之间存储有用的信息。比如很多网站登录界面都有保留账号密码,以便下次登录。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。
Cookie是由服务端生成,存储在响应头中,返回给客户端,客户端会将cookie存储下来,在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头中,并发送给服务端。postman也可以设置、获取、删除Cookie。
Set Cookies
在Send按钮下方点击Cookies文字菜单,弹出如下界面,然后可以设置Cookie。
setcookie
请求URL如下:请求方式为GET,添加Cookie值为username:zhuangzhuang
postman 环境变量设置
变量
问题思考
在开发不同阶段可能存在不同的环境,比如测试环境和生产环境。
测试环境API如下:
https://dev.postman.com/get
https://dev.postman.com/post
https://dev.postman.com/put
生产环境API如下:
https://postman-echo.com/get
https://postman-echo.com/post
https://postman-echo.com/put
在这么情况下,按照常规思路要么你需要维护两套环境的API,要么每次都手动一个个去修改URL,不管哪种选择都比较麻烦且低效,那么有没有比较的好的方法来解决这个问题呢?
Postman变量类型
通过比较我们可以发现,以上两组API主要是除了host不同之外其他都一样,其实把Host用变量替换,这样就可以灵活切换环境。
Postman提供了变量设置,有4种变量类型。
- 本地变量(LocalVariable )
- 全局变量(Global Variable)
- 环境变量(Environment Variable)
- 数据变量(Data Variable)
环境变量
环境变量指在不同环境,同一个变量值随着环境不同而变化,比如我们上面举例场景就可以使用环境变量,当在测试环境时,host值为: dev.postman.com ,当切换到生产环境时,host值变为:postman-echo.com 。
环境变量设置:
在postman界面点击右上角眼睛图标,即可开始设置环境变量和全局变量。环境变量设置过程如下图所示:我们可以设置两种环境 dev和release,dev是开发测试环境; release是正式的生产环境。host环境变量,根据不同的环境值不一样。
变量引用格式为:
{{host}}/get
本地变量
本地变量主要是针对单个URL请求设置的变量,作用域只是局限在请求范围内。如请求URL如下,设置两个本地变量(user,passwd)作为参数。请求方式为POST
https://postman-echo.com/post
变量设置好之后需要赋值,在Pre-request-Script里面编写如下代码:
pm.variables.set("user","51zxw");
pm.variables.set("passwd","66666");
点击send执行之后的返回值如下,可以看到我们定义的变量已经发送。
{
"args": {},
"data": "",
"files": {},
"form": {
"user": "51zxw",
"passwd": "6666"
},
"headers": {
"host": "postman-echo.com",
"content-length": "24",
"accept": "*/*",
"accept-encoding": "gzip, deflate",
"cache-control": "no-cache",
"content-type": "application/x-www-form-urlencoded",
"cookie": "sails.sid=s%3ARNfROdcmaqrU3ZqglMdbnqU4tI3_BHTE.WUBtzhacnJT44oLzytikWtVmg7wfkD7tDNb%2FPtVBRnM",
"postman-token": "9367ea9b-b349-4bc4-85d4-5638b5ff30e1",
"user-agent": "PostmanRuntime/7.1.5",
"x-forwarded-port": "443",
"x-forwarded-proto": "https"
},
"json": {
"user": "sutune",
"passwd": "12345"
},
"url": "https://postman-echo.com/post"
}
全局变量
全局变量是指在所有的环境里面,变量值都是一样的,全局变量的作用域是所有请求。
全局变量设置有两种方式:
- 点击界面里设置
- 在脚本里设置
界面设置
点击眼睛图标后,在Global选项菜单点击Edit菜单即可设置全局变量,如下图所示。全局变量的引用格式和环境变量一样,
注意:当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量。
脚本设置
使用如下脚本可以设置全局变量:variable_key表示变量名称, variable_value 表示变量值。
pm.globals.set("variable_key", "variable_value");
实践案例
在实际接口测试过程中,接口经常会有关联。比如需要取上一个接口的某个返回值,然后作为参数传递到下一个接口作为参数。假设我们要获取A接口返回的userid值作为B接口的请求参数。
A接口请求URL如下:
https://postman-echo.com/post
- 请求方式为Post
- 请求参数:userid(这里自己定义,接口会返回对应的id值)
返回值
{
"args": {},
"data": "",
"files": {},
"form": {
"userid": "123456"
},
"headers": {
"host": "postman-echo.com",
"content-length": "13",
"accept": "*/*",
"accept-encoding": "gzip, deflate",
"cache-control": "no-cache",
"content-type": "application/x-www-form-urlencoded",
"cookie": "sails.sid=s%3AxZeg8NHeQGGFv2AUFblww7xF5HeP-4pi.sYxwR13VMFrUqvpJ%2Be8scGNnjgQAdOP3EeL6DSZqNQo",
"postman-token": "7890d763-2bb1-4e88-aa1c-ad0bfc7db9b1",
"user-agent": "PostmanRuntime/7.1.5",
"x-forwarded-port": "443",
"x-forwarded-proto": "https"
},
"json": {
"userid": "123456"
},
"url": "https://postman-echo.com/post"
}
根据返回值我们需要从返回值中提取userid值。在Test标签栏下编写如下脚本获取userid值
//获取返回的响应值然后转化为json格式
var jsonData = pm.response.json();
//获取返回的userid值
userid=jsonData.json['userid'];
//控制台日志查看
console.log(userid);
//将获取的变量设置全局变量
pm.globals.set("userid", userid);
B接口请求URL如下:请求方式为GET
postman-echo.com/get?userid={{userid}}
先执行A接口的,然后在执行B接口,此时B接口通过全局变量userid可以获得A接口的返回值。
数据变量
数据变量是通过导入外部数据文件(json文件或者csv文件),来获取变量数据。我们可以创建一个如下内容的json文件:
data.json
[{
"username": "jack",
"passwd": "6666"
},{
"username": "Bob",
"passwd": "5555"
}, {
"username": "Marry",
"passwd": "8888"
}]
断言
简介
一般来说执行完测试,我们需要对测试结果来进行校验,判断结果是是否符合我们的预期,也就是断言。在接口测试中一般会根据响应状态码或者响应返回的数据来进行断言。
Postman提供一个测试沙箱(Postman Sandbox) 测试沙箱是一个JavaScript执行环境,可以通过JS脚本来编写pre-request Script和test Script。
pre-request Script(预置脚本)可以用来修改一些默认参数,在请求发送之前执行。有点类似于unittest里面的setUp()方法。
test Script(测试脚本)当接收到响应之后,再执行测试脚本。
案例
接口请求URL如下:请求方式为POST
postman-echo.com/post
断言规则
- 响应状态码:200
- 响应内容:返回的user参数值与定义的一致
- 响应时间:小于0.5s
测试脚本
在pre-request Script定义变量user
pm.variables.set("user",'zxw');
在Test栏下面编写如下脚本
//判断响应状态码
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
//获取发送的参数值
username=pm.variables.get("user");
console.log(username);
//校验响应内容是否和请求的一致
pm.test("Check username", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.json['user']).to.eql(username);
});
//检测响应时间是否小于0.5s
pm.test("Response time is less than 500ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500);
});
断言结果
状态码
状态码 | 说明 | 详情 |
200 | 成功 | 服务器已成功处理了请求 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
301 | 永久移动 | 请求的网页已永久移动到新的位置,即永久重定向 |
302 | 临时移动 | 请求的网页暂时跳转到其他页面,即重定向 |
400 | 错误请求 | 服务器无法解析该请求 |
401 | 未授权 | 请求没有进行身份验证或验证未通过 |
403 | 禁止访问 | 服务器拒绝此请求 |
404 | 未找到 | 服务器找不到请求的网页 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 未实现 | 服务器不具备完成请求的功能 |
502 | 错误网关 | 服务器作为网关代理,从上游服务器收到无效响应 |