发布时间: 更新时间:

本文建议只阅读前4小节。主要参考文章https://kalacloud.com/blog/postman-tutorial

API

API的英文即 Application Programming Interface 首字母的缩写,直译过来的意思就是:程序之间的接口。我更倾向于把API理解为,程序之间的合约。有关 API 是什么及它的意义这里就不展开讲了。

chrome浏览器开发者工具

勾选上谷歌开发者工具的preserve log,保留上一个页面接口调用信息,从而方便我们查看

Postman

界面导航说明

请求:

params:get请求传参。

Authrization:鉴权

Headers:请求头

  accept:客户端接收的数据类型。

  content-type:客户端发送给服务器的数据类型

  user-agent:客户端的类型

  xmlhttprequest:异步请求

Body:Post请求传参

  none:没有参数

  form-data:文件上传(包含键值对和文件上传)

  x-www-from-urlencodeed:表单请求(键值对)

  raw:使用原始数据格式请求(JSON,XML,HTML,Text,Javascript)

  binary:二进制文件上传。

Pre-request-script:请求之前的脚本。

Tests;请求之后的脚本。

Setting:设置

Cookies:用于自动管理Cookie的功能

响应:

Body:返回的信息

  Pretty(各种格式查看返回数据)

  Raw(文本格式)

  Preview(网页)

Cookie:响应Cookie

token鉴权码:

  csrf_token:一般情况下有效期是7-15天。

  access_token:一般情况下有效期是10分钟-2小时

Headers:响应头

TestResults:测试结果

200 响应码

GET 请求

  1. GET 请求基本操作

(1)点击主界面「+」号,新建一个请求页

(2)选择 GET 请求命令

(3)输入 API 地址

在 GoRest API 设计中 GET 请求无需鉴权,所有我们直接点击「Send」即可远程调取服务器信息。

如果我们只想看调取其中一位用户的信息应该怎么办呢?我们可以在 API URL 中带上参数。

  1. 带参数的 GET 请求

如果我们想查询 ID 为 2043 的用户信息,我们只需要在请求页面中的 Params(参数) 标签页的 KEY - VALUE 内填写对应的参数即可,之后 Postman 会自动在 API URL 中生成你填写的参数,使 URL 带上参数 GET 请求。

https://gorest.co.in/public/v1/users?id=2043

设置完成后,点击「Send」

我们可以看到,返回值中仅包含我们请求的 user id 为 2043 的用户信息。

  1. GET 请求中的多条件查询

有时,我们需要使用 API 进行多条件查询操作,比如想找 name 值为 kalacloud.com ,同时 gender 值为 male 的用户。(特别提示:此格式是通用写法,但最终要看 API 的开发者如何约定调用方式)

BaseURL + ResourceName + ? + key1 = value1 + & + key 2 = value 2 ……

主 URL 之后使用 ? 连接参数,参数与参数之间使用 & 连接符连接。

https://gorest.co.in/public-api/users/?name=kalacloud.com&gender=male

当然,我们可以直接在 Postman 的 Params 中直接填写 KEY - VALUE

让 Postman 帮我们生成,然后点击「Send」

可以看到 API GET 调取了我们设定的两个 VALUE 值的 data 信息。

特别提示,你可以点击右上角的「Bulk Edit」进行参数的批量编辑

POST 请求

POST 方式一:模仿浏览器

在发送一个get请求之后,postman会自动保存cookis,我们只需复制 Payload 的数据格式到 body ,复制 x-csrf-token 到 Headers ,发送这个 POST 请求

自动方式可以参考

POST 方式二:鉴权 在 Authorization 中添加鉴权方式和密钥,postman会自动添加到Headers,按照api写入所需body,发送这个 POST 请求

用 Postman 发送第一个 PUT 更新请求

PUT 请求一般用于更新服务器已有资源,如果服务器中没有对应的资源,那么 PUT 会创建相应的资源(特别提醒:虽然 PUT 有创建新资源的功能,但是否能创建成功,最终取决于你调用的 API 是否支持此功能)

打开你的 Postman 我们来创建一个 PUT 请求。

  • 点击「+」号,新建一个请求页

  • 请求类型选择「PUT」

  • 根据第6节我们使用 POST 请求创建的资源 ID 为 1475 ,又根据 GoRest API 的文档得知,修改资源的 API 地址为

    https://gorest.co.in/public/v1/users/{{ID}}
    

    ,所以我们要使用 PUT 修改 ID 为 1475 资源的请求地址应该写:

https://gorest.co.in/public/v1/users/1475
  • 选择在 Body 标签中填写 JSON 格式的资源修改信息。我们将 1475 中的邮箱由

    修改为 [email protected],所以我们在 Body 中填写以下代码。

{
  "name": "kalacloud",
  "gender": "Male",
  "email": "[email protected]",
  "status": "Active"
}
  • 选择 Auth 标签,进行 API 鉴权,鉴权方法详见本文第6节《使用 Postman 对 API 鉴权》
  • 点击 「Send」发送 PUT 请求

  • 如上图所示,可以看到红4位置 响应代码返回 200 ,这说明 PUT 请求已经执行成功。
  • 返回的 Body 信息中,email 字段已经更新为 [email protected]

用 Postman 发送第一个 PATCH 更新请求

PATCH 请求一般用于服务器资源的部分更新,它相对于 PUT 提交的数据更少,不用提整个数据,只需要提交需要修改的字段即可。有关 PUT 和 PATCH 的更多区别,可查看本文第9节。

打开你的 Postman 我们来创建一个 PATCH 请求。

  • 点击「+」号,新建一个请求页

  • 请求类型选择「PATCH」

  • 根据第6节我们使用 POST 请求创建的资源 ID 为 1475 ,又根据 GoRest API 的文档得知,修改资源的 API 地址为

    https://gorest.co.in/public/v1/users/{{ID}}
    

    ,所以我们要使用 PATCH 修改 ID 为 1475 资源的请求地址应该写,到这里都和 PUT 请求修改资源的方法一样。

https://gorest.co.in/public/v1/users/1475

选择在 Body 标签中填写 JSON 格式的资源修改信息。上一节我们已经将 ID 为 1475 资源的邮箱改为 [email protected] ,接着我们用 PATCH 请求把这个邮箱改为

{
"email":"[email protected]" 
}
  • 选择 Auth 标签,进行 API 鉴权,鉴权方法详见本文第6节《使用 Postman 对 API 鉴权》
  • 点击 「Send」发送 PATCH 请求

  • 如上图所示,可以看到红4位置 响应代码返回 200 ,这说明 PATCH 请求已经执行成功。

  • 返回的 Body 信息中,email 字段已经更新为

PUT 和 PATCH 的区别

在 HTTP 协议中,PUT 和 PATCH 都是用于更新服务器资源的命令,但他们有着不同的格式和用途。

PUT 请求:一般用于更新服务器已有资源,如果服务器中没有对应的资源,那么 PUT 会创建相应的资源(特别提醒:虽然 PUT 有创建新资源的功能,但是否能创建最终取决于你调用的 API 是否支持此功能)

PATCH 请求:用于局部更新服务器现有资源,它不用像 PUT 更新资源中的一点点也要提交所有字段信息,PATCH 更新哪个字段就提交哪个字段的更新信息即可。

举例说明PUT 和 PATCH 的区别:

同样是更新资源中的 Email 信息,PUT 需要带上资源中的所有信息,然后在更新(上图)

而 PATCH 则仅需要提交更新部分,即仅提交邮箱信息即可(下图)

那么,如果 PUT 像 PATCH 一样仅提交资源的局部信息会发生什么呢?会 400 报错。

PUT 不论修改多少,必须把修改资源的全部字段写全,否则会 400 报错。

用 Postman 发送第一个 DELETE 删除请求

我们在上文讲了获取(GET),创建(POST),更新(PUT / PATCH) 请求,接着我们来说说删除(DELETE) 请求。顾名思义,DELETE 请求执行可删除整个资源。我们来直接实践一次你就明白了。

打开你的 Postman ,跟随本教程一起创建一个 DELETE 请求。

  • 点击「+」号,新建一个请求页

  • 请求类型选择「DELETE」

  • 我们来把上文刚刚创建的 ID 为 1475 的资源彻底删掉。根据 GoRest API 的文档得知,删除资源的 API 请求地址为

    https://gorest.co.in/public/v1/users/{{ID}}
    

    ,所以我们要使用 PATCH 删除 ID 为 1475 资源的请求地址应该写:

https://gorest.co.in/public/v1/users/1475
  • 选择 Auth 标签,进行 API 鉴权,鉴权方法详见本文第6节《使用 Postman 对 API 鉴权》
  • 点击 「Send」发送 DELETE 请求,删除对应的资源。

如上图所示,提交 DELETE 请求后,响应代码为 204 ,返回的 body 为空,删除成功。

特别提示:在 GoRest 的文档说明中,特别说了 DELETE 删除返回值的状态。

API 返回状态具体是怎么样的,还要看 API 的开发者是如何约定的,并非只有返回 200 才是成功的。

Postman 中的全局变量、环境变量、集合变量的设置

  1. Postman 设置变量的意义

Postman 里有多种变量,我们可以把某些重要的值抽象出来变成变量,方便我们做场景 / 条件切换。比如,我们可以把 baseURL 抽出来,在环境变量里设置「生产环境变量」和「测试环境变量」,之后,我们只需要切换标签即可快速将数据从一个环境切换到另一个环境中,非常方便。

  1. Postman 常用的三种变量形式
  • 全局变量:全局变量一旦声明,即可应用到 Postman 中所有测试的 API 中。任何请求都可以直接使用全局变量,它的作用域是全局的。
  • 环境变量:Postman 的环境变量可以理解为一组选项,当这组环境变量选项被选中时,才会生效,特别适合「生产环境」和「测试环境」之间的切换等应用场景。
  • 集合变量:集合变量是针对集合(Collections)生效的,一个集合下可能有 N 条 API 请求,集合变量可以一次修改集合下的所有变量数值。

以上三种变量的作用域从大到小为 全局 集合 环境,当三个变量形式同时作用于一个 API 测试条时,Postman 会优先使用最小作用域变量。

  1. 如何在 Postman 设置全局变量与环境变量

  • 新建一个请求页,点击右上角的「小眼睛」进入变量设置页。
  • 页面上方为「环境变量」,我们点击编辑设置环境变量名为「卡拉云_API 测试环境」
  • VARIABLE 设置为 baseURL,INITIAL VALUE 设置为 https://gorest.co.in ,保存之后我们就可以使用 {{baseURL}} 变量来替代 API URL 了。
  • 页面下方为「全局变量」,VARIABLE 设置为 kalacloud_id,INITIAL VALUE 设置为 2312 (2312 为 GoRest 中的一个已存在的用户信息 ID),保存后我们就可以使用 {{kalacloud_id}} 变量来替代 ID 值了。

我们来一起测一下刚刚设置好的「全局变量」和「环境变量」是否生效。

  • 新建一个 GET 请求页,地址栏填入:
{{baseURL}}/public/v1/users?id={{kalacloud_id}}
  • 点击「Send」

返回响应代码为 200 说明请求成功,返回的 Body 信息是 ID 为 2312 的用户信息,说明全局和环境变量已生效。

  1. 如何在 Postman 设置集合变量

集合变量是指应用在整个集合所有请求中的变量,集合变量优先与其他变量应用与请求,也就是说如果有集合变量,那么其他变量与集合变量相冲突的化,优先执行集合变量。

集合变量很适合临时修改整个集合中的变量,来针对集合进行测试。

打开你的 Postman,我们一起操作一遍。

  • 选中一个集合,点击集合标题右侧「…」选择编辑。
  • 进入集合设置页,选择 Variables 设置集合变量
  • 此时,整个集合下所有请求页,都应用了此集合变量。

如何使用 Postman Pre-request scripts 预请求脚本

Pre-request scripts 预请求脚本是在 API 请求之前执行的脚本,我们可以临时更改请求的某些变量。一般预请求脚本有这么两种常见的应用场景。(1)设置动态请求头信息。 (2)设置动态请求参数信息。比如,当我们要请求一个与时间有关的资源时,我们可以在预请求脚本中添加 timestamp 字段,这是一个动态值,我们可以通过前置请求脚本来实现。

举例说明:比如我们要在 header 中包含一个时间戳,我们可以这样操作

  • 在 Pre-request scripts 中添加获取时间戳的代码
pm.environment.set("TimeStampHeader",new Date());

  • 在 header 中添加预脚本中的变量 TimeStampHeader 当请求时,Postman 会先执行预脚本获取时间戳,然后再将时间戳赋予到 header 中 timestamp 值中。

  • 接着我们来执行这条 GET 请求,打开控制控制台,在控制台中,可以看到 Request Headers 中包含我们刚刚设置的时间戳 「timestamp」特别提示:有关控制台的讲解,在本教程第14节。

附:常用的 Pre-request scripts :

获取变量

//通用语法
postman.getGlobalVariable("key");       //获取全局变量
postman.getEnvironmentVariable("key");  //获取环境变量  

//postman native app 特有语法 
pm.globals.get("key");                //获取全局变量
pm.environment.get("key");            //获取环境变量

设置变量

//通用语法
postman.setGlobalVariable("key","value");       //设置全局变量
postman.setEnvironmentVariable("key","value");  //设置环境变量  

//postman native app 特有语法 
pm.globals.get("key","value");                //设置全局变量
pm.environment.get("key","value");            //设置环境变量

清除变量

//通用语法
postman.clearGlobalVariable("key");       //清除全局变量
postman.clearEnvironmentVariable("key");  //清除环境变量  

//postman native app 特有语法 
pm.globals.unset("key");                //清除全局变量
pm.environment.unset("key");            //清除环境变量

将数组、嵌套对象存储到全局&环境变量中

//将数组储存到环境变量中
var array = [1, 2, 3, 4];
postman.setEnvironmentVariable("array", JSON.stringify(array));

//将嵌套对象储存到环境变量中
var obj = { a: [1, 2, 3, 4], b: { c: 'val' } };
postman.setEnvironmentVariable("obj", JSON.stringify(obj));

//从环境变量中获取数组对象
var array = JSON.parse(postman.getEnvironmentVariable("array"));

//从环境变量中获取嵌套对象/json对象
var obj = JSON.parse(postman.getEnvironmentVariable("obj"));

如何创建 Postman Tests 测试脚本 - Postman 断言功能

在 Postman 中 Pre-request 和 Tests 是两兄弟,一个是在调用前执行(Pre-request),一个是在调用后执行(Tests),我们可以在 Tests 中使用 JavaScript 校验代码协助我们验证结果,可以说 Tests 是 Postman 的断言功能

  1. Postman Tests 断言的实际应用
  • Postman 状态类断言

1.我们首先创建一个 GET 请求,然后点击 Postman 中 Tests 标签,进入断言设置。

2.我们可以在右侧已经预设好的断言代码,我们先点击「Status code: Code is 200」,可以看到预设的代码直接写入编辑框。这段代码的意思是,如果执行调用,服务器返回响应代码为 200 时,判断为 PASS 即调用成功。

3.点击「Send」执行 GET 请求,返回的断言可以在 Test Results 中看到结果。

4.绿色的 PASS,说明服务器返回的响应代码为 200 ,调用成功。

  • Postman 结果比较类断言

我们再添加一条带有变量的 JavaScript 断言设置,比较预期结果和实际返回结果之间是否一致。

我们刚刚 GET 请求了 ID 2312 的用户信息,其中 name 的值为 kalacloud

那么我们接下来写一个 JS 判断预期与返回结果是否一致。即预期为 name 的值为「kalacloud」,写断言自动判断返回结果的name值是否也是「kalacloud」

1.在 Tests 选项卡右侧选择「Response body:JSON value check」,我们来检测 ID2312 的返回值中,name 的值是否为 kalacloud

2.我们将「Your Test Name」替换为「检查 ID 为 2312 的 name 返回值为 kalacloud」让这条测试的名字直接反应出我们想测试的内容。

3.使用

jsonData.data[0].name

代替jsonData.value ,即检测第一个返回值中的 namevalue

4.检测返回值:在 to.eql() 中输入待检测值 "kalacloud",即需要检测的 text。

5.代码如下,你可以复制并根据你的情况简单修改,然后在 Postman 中,跟随教程一起测试。

特别注意:这里的 ID = 2312 是我这里的情况,你需要根据你的情况进行相应修改。

pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

pm.test("检查 ID 为 2312 的 name 返回值为 kalacloud", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.data[0].name).to.eql("kalacloud");
});

如何在 Postman 中使用控制台

控制台可以非常直观的显示当前调用的一系列信息,我们可以在「菜单 → view → Show Postman Console」或者点击 Postman 左下角的「Console」图标,打开控制台。

我们可以在 Tests 测试脚本中加入 console.log 来显示我们需要在控制台显示的调用信息。

如上图,我们在 Test 脚本中加入以下代码

console.log("本次测试 id 值为",pm.variables.get("kalacloud_id"));

可以显示隐藏在变量下面的具体变量值,方便我们测试时,进行相应的判断。

如何使用 Runner 批量执行测试,批量更换变量测试

当我们有一组 API 且这一组之间相互关联的关系,使用手动测试效率非常低。这时,我们就要用到 Postman 的批量执行(Runner)功能,Runner 不仅可以批量执行 API 调用,还可以批量更换变量。掌握此方法,大幅度提升 API 测试效率。

打开你的 Postman ,跟随本教程一起操作一遍吧。

  • 本次批量 API 测试,我们先导入一个 CSV 文件,文件中包含四组等待新建的用户信息,将 CSV 文件导入 Runner 中待用。

  • 新建 POST 调用页,在 Body 里写上创建用户所需信息,所有值使用变量替代,这些变量将从 CSV 中读取。

  • 新建 GET 调用页,使用 email 作为查询 KEY 进行查询,如果上一步 POST 执行成功,那么 GET 就能成功查询到新建用户对应的 email,查询到表示 POST 创建成功。

  • 在「卡拉云_kalacloud.com_批量测试」这个集合中设置 Tests 中设置全局断言,每当一个调用执行完毕时,进行 Tests 一次判断。
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});

  • 打开「卡拉云_kalacloud.com_批量测试」合集的「Run Collection」的设置页
  • Iterations:这是测试组,我们 CSV 文件中有 4 组测试条目
  • Delay:延迟,一般填 2000 毫秒,太密集的请求,容易被服务器拒绝
  • Data:这里选择我们刚刚的 CSV 文件:kalacloud_users.csv 导入测试数据
  • 点击 RUN 蓝色按钮开始执行批量测试

从上图可以看到,Postman 按顺序提交了 POST 请求和 GET 请求,并连续测试了从 CSV 文件导入的 4 组数据。一键批量测试,相当高效。

Licensed under CC BY-NC-SA 4.0