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按钮,可以看到返回值。如图展示:

用户 postgres 的口令 免密码登录_postman

Postman 工作原理

如图所示,在Postman中输入请求并单击Send按钮时,服务器将接收您的请求并返回Postman在接口中显示的响应。

① postman点击send发送请求给服务器②,

② 服务器响应,对数据进行处理,然后返回给postman

③ 对返回内容进行加工处理,把格式化后的内容显示出来

用户 postgres 的口令 免密码登录_服务器_02

发送不同类型请求

发送-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

用户 postgres 的口令 免密码登录_postman_03

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 壮壮”

用户 postgres 的口令 免密码登录_数据_04


这里看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信息。

用户 postgres 的口令 免密码登录_Postman_05

Postman接口授权设置

很多时候出于安全考虑,我们的接口并不希望对外公开,这个时候就需要使用授权机制(Authorization),授权过程验证是否有访问服务器所需的数据权限。当发送请求时,同城必须包含的参数,以确保请求具有访问和返回所需的数据权限。
postman支持的授权协议类型如下:

  • No Auth
  • Bearer Token
  • Basic Auth
  • Digest Auth
  • OAuth 1.0
  • OAuth 2.0
  • Hawk Authentication
  • AWS Signature
  • NTLM Authentication

用户 postgres 的口令 免密码登录_postman_06

Basic auth

基本身份验证是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和对应的密码。
案例:请求URL如下,授权账号为:

  • 用户名:postman
  • 密码:password
  • 授权协议 Basic auth
postman-echo.com/basic-auth
  • 不输入用户名密码,直接使用get请求,则会返回 :Unauthorized
  • 输入用户名密码,选择Basic auth授权类型,则会返回如下结果:
{
    "authenticated": true
}

用户 postgres 的口令 免密码登录_postman_07


用户 postgres 的口令 免密码登录_数据_08

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=""

用户 postgres 的口令 免密码登录_服务器_09


执行请求结果如下:

{
    "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

执行结果:

用户 postgres 的口令 免密码登录_Postman_10

如果将key改为其他任意的字符则返回如下结果:

用户 postgres 的口令 免密码登录_postman_11

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

发送请求结果如下:

用户 postgres 的口令 免密码登录_数据_12


如果Consumer Secret错误则返回如下结果:

用户 postgres 的口令 免密码登录_服务器_13

Cookie设置

cookie是存储在浏览器中的小片段信息,每次请求后都将其发送回服务器,以便在请求之间存储有用的信息。比如很多网站登录界面都有保留账号密码,以便下次登录。

由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

Cookie是由服务端生成,存储在响应头中,返回给客户端,客户端会将cookie存储下来,在客户端发送请求时,user-agent会自动获取本地存储的cookie,将cookie信息存储在请求头中,并发送给服务端。postman也可以设置、获取、删除Cookie。

Set Cookies

在Send按钮下方点击Cookies文字菜单,弹出如下界面,然后可以设置Cookie。

用户 postgres 的口令 免密码登录_数据_14

setcookie

请求URL如下:请求方式为GET,添加Cookie值为username:zhuangzhuang

用户 postgres 的口令 免密码登录_数据_15


用户 postgres 的口令 免密码登录_服务器_16

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环境变量,根据不同的环境值不一样。

用户 postgres 的口令 免密码登录_postman_17


用户 postgres 的口令 免密码登录_数据_18


变量引用格式为:

{{host}}/get

本地变量

本地变量主要是针对单个URL请求设置的变量,作用域只是局限在请求范围内。如请求URL如下,设置两个本地变量(user,passwd)作为参数。请求方式为POST

https://postman-echo.com/post

用户 postgres 的口令 免密码登录_postman_19

变量设置好之后需要赋值,在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菜单即可设置全局变量,如下图所示。全局变量的引用格式和环境变量一样,

注意:当环境变量和全局变量名称一样时,切换到某个环境时,环境变量会覆盖全局变量。

用户 postgres 的口令 免密码登录_服务器_20

脚本设置

使用如下脚本可以设置全局变量: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);
});

断言结果

用户 postgres 的口令 免密码登录_Postman_21

状态码

状态码

说明

详情

200

成功

服务器已成功处理了请求

201

已创建

请求成功并且服务器创建了新的资源

301

永久移动

请求的网页已永久移动到新的位置,即永久重定向

302

临时移动

请求的网页暂时跳转到其他页面,即重定向

400

错误请求

服务器无法解析该请求

401

未授权

请求没有进行身份验证或验证未通过

403

禁止访问

服务器拒绝此请求

404

未找到

服务器找不到请求的网页

500

服务器内部错误

服务器遇到错误,无法完成请求

501

未实现

服务器不具备完成请求的功能

502

错误网关

服务器作为网关代理,从上游服务器收到无效响应