Postman 的实用功能

Postman 的实用功能

前言

我是一个 Android 开发工程师,日常开发中最免不了的就是使用 Postman 进行网络调试,Postman 也很方便,URL、Header 都能设置。下面来分享几个有用的功能,来看看有没有你没用过的。

image-20200629171237658
image-20200629171237658

基础使用

初次打开 Postman,就会显示上图这样的页面。需要测试一个请求的时候,新开一个 Tab,填写 URL、选择请求方式,还要按照接口的要求设置响应的 Header、Params,然后点击 Send 发送请求,观察响应。

image-20200630143346409
image-20200630143346409

Collection

这就是最简单一次网络请求,我之前一直是这么用的,没有毛病。直到有一天,老大给我一个 JSON 文件,让我导入到 Postman,说是这是你后面要接手的项目的所有的网络请求。我导入之后,大概是下面这样的。老大告诉我,导入的这个就是一个 Collection,你可以在 Postman 中创建多个 Collection。

image-20200630150543167
image-20200630150543167

这是我第一次接触 Collection,还是挺兴奋的,跑到一旁去研究这些接口去了,用了一阵子我发现,Collection 还可以在内部创建文件夹,用分包的形式对 Collection 里的请求进行归类整理,就像这样。

image-20200630152402689
image-20200630152402689

Environment

用了没多久,我发现了一个问题,每次我访问的接口 token 变了,我就需要把每个请求的 header 中的 token 那个值改一下,这样弄太麻烦了。我就想 Postman 能不能设置全局变量,然后我只需要在一个地方更新 token,其他地方自动设置。查了一下还真有这个功能。

不过 Postman 把变量这个概念放在了 Environment 中,如果把变量看做是请求,那么 Environment 就是变量的 Collection。

image-20200630161417022
image-20200630161417022

① 当前的 Environment

② 查看当前 Environment 中的值

③ 设置 Environment「可以添加、删除 Environment 或编辑其中的变量」

点击 ③ 可以打开下面这个面板,这个面板是列出当前所有的 Environment,点击每一个 Environment 的名称可以进入并编辑所属的变量。

点击 ④ 可以新建一个 Environment,并创建、编辑、删除变量;点击 ⑤ 则是直接对全局变量进行创建、编辑、删除,这里的全局的意思是在发起一个请求时不设置 Environment 也能使用的变量。

image-20200630171558981
image-20200630171558981

点击上图的 ④ 或 ⑤ 都会打开一个设置参数的面板,区别就在于 ⑤ 无需设置 Environment 的名称。

image-20200630161003931
image-20200630161003931

需要注意啊,如果你把变量设置在了 Environment 而不是全局的,需在发送请求之前,设置当前所使用的 Environment,点击 ① 处就能选择 Environment 了。

image-20200701144232925
image-20200701144232925

我就这么用了一阵子,也没什么事,老老实实的开发我的 APP,直到测试找上门来,说不对啊,你这 App 上的数据不对啊,还有有的时候半天都没数据,那个 Loading 动画一直在转,人家 iOS 都是好的。这我哪能忍,经过我一番排查,结果发现是服务器的问题,于是我就让测试再遇到这种情况,自己用 Postman 测试一下,自己去看数据。可人家又嫌每次都得用一下 Postman 太麻烦,于是我又发现了一个 Postman 功能,Test。

Test

Test 可以对每个请求及响应执行相应的测试逻辑,比如延迟是否超过 200ms,服务器响应是否为 200 等等,测试逻辑所采用的编程语言是 JavaScript。

image-20200701145427438
image-20200701145427438

每个请求都有一个 Tests 的 Tab,在 Tests 下方的编辑框中可以自行编写代码,相应的每个响应也都有一个 TestResult,在这里展示每一个 Test 的执行结果,是通过还是失败,如果是失败还有具体的原因。

下面就来简单测试一下,测试的项目是响应时间少于 200ms 和是否成功响应「是否成功响应,直接判断服务器返回的状态码是否为 200」。

image-20200701150729899
image-20200701150729899

可以看到,这次的测试有一个通过,一个失败的,失败的原因是请求时间为 1891ms 高于我们设置的 200ms 的目标值。

嘿,你是不是在想测试哪些东西?Postman 都提供示例了,你看上图 Tests 编辑框右侧我框柱的区域,那是 Postman 提供的几个模板。直接拿来用就好了。如果模板不够用的,还可以自己写呢,Header 和 Body 都可以进行测试。

比如我们一般把服务器的响应规定为下面这种类型,而客户端需要先判断 status 是否正确,然后再进行取值,那么我们需要拿到 status,然后进行判断。下面就是数据示例及测试样例代码。

{
    "data": {
        "isAgency": "0",
        "token": "456789......"
    },
    "msg": "OK",
    "oK": true,
    "status": 200
}
var data = JSON.parse(responseBody)
var statusCode = data.status
pm.test("测试接口是否异常", function () {
    pm.expect(200).to.equal(statusCode)
})

还记得,我们利用 Environment 进行设置变量,然后在请求的 Header 中进行使用吗?Test 也可以对变量进行操作的。利用下面这四个方法就能对 Environment 或全局的变量进行取值和赋值操作。

pm.environment.get("variable_key");
pm.environment.set("variable_key", "variable_value");
pm.globals.get("variable_key");
pm.globals.set("variable_key", "variable_value");

这样一来,我们还可以利用,Test 来对 Token 进行自动更新,当我们检查出当前的接口返回数据正常,就把 Token 写入到 Environment 变量即可。

if (statusCode == 200) {
    var token = data.data.token
    pm.environment.set("token", token)
}

Collection Runner

这个功能也挺好,针对单个请求的,但是如果要测试很多呢?那测试人员肯定还不愿意用这个,有没有批量测试的工具呢。答案是有的,就在 Collection 里面,Collection 是一些请求的合集,它提供了一个叫 runner 的功能。

image-20200701160954937
image-20200701160954937

依次点击箭头所指的图标就能进入 Collection runner 面板。

image-20200701161156537
image-20200701161156537

看上图,A 区当前 Collection 所有的接口,可以选择执行范围,默认是整个 Collection,B 区则是选择的将要进行测试的接口,每个请求还可以进行拖动排序;C 区就是对整个测试的配置,比如执行几遍,每个请求间隔多少毫秒,是否保存响应等等,配置完成后就可以执行了。

image-20200701161756799
image-20200701161756799

这个是测试结果,我对单个 Collection 中的单个接口进行了三次的请求。在这个页面上,也是可以对每一次的请求查看每个请求的信息,包括请求地址、Header、Response、响应 Header、响应 Body。

image-20200701162125565
image-20200701162125565

而且还能导出,把单次请求结果进行导出,导出的文件也是 JSON 格式的,很方便查看。

没想到 Postman 还挺好用的哈,赶紧推荐给测试,下次数据再出问题,让他直接找后台去,还有数据摆在面前,想跑都到不掉。

对了,如果登录 Postman,Postman 还会把 Collection 和变量 Environment 保存在云端,多个设备之间会自动同步。

参考资料

  1. Test 示例及官方资料
  2. Postman log 打印
  3. Collection Run

关于我

我是一个普普通通的 Android 开发者,你可以在简书掘金,还有我的个人博客找到我。

本文封面图:Photo by Ian Schneider on Unsplash