Postman 的实用功能
date
Jul 1, 2020
slug
Postman
status
Published
tags
工具软件
summary
type
Post
前言
我是一个 Android 开发工程师,日常开发中最免不了的就是使用 Postman 进行网络调试,Postman 也很方便,URL、Header 都能设置。下面来分享几个有用的功能,来看看有没有你没用过的。
基础使用
初次打开 Postman,就会显示上图这样的页面。需要测试一个请求的时候,新开一个 Tab,填写 URL、选择请求方式,还要按照接口的要求设置响应的 Header、Params,然后点击 Send 发送请求,观察响应。
Collection
这就是最简单一次网络请求,我之前一直是这么用的,没有毛病。直到有一天,老大给我一个 JSON 文件,让我导入到 Postman,说是这是你后面要接手的项目的所有的网络请求。我导入之后,大概是下面这样的。老大告诉我,导入的这个就是一个 Collection,你可以在 Postman 中创建多个 Collection。
这是我第一次接触 Collection,还是挺兴奋的,跑到一旁去研究这些接口去了,用了一阵子我发现,Collection 还可以在内部创建文件夹,用分包的形式对 Collection 里的请求进行归类整理,就像这样。
Environment
用了没多久,我发现了一个问题,每次我访问的接口 token 变了,我就需要把每个请求的 header 中的 token 那个值改一下,这样弄太麻烦了。我就想 Postman 能不能设置全局变量,然后我只需要在一个地方更新 token,其他地方自动设置。查了一下还真有这个功能。
不过 Postman 把变量这个概念放在了 Environment 中,如果把变量看做是请求,那么 Environment 就是变量的 Collection。
① 当前的 Environment
点击 ③ 可以打开下面这个面板,这个面板是列出当前所有的 Environment,点击每一个 Environment 的名称可以进入并编辑所属的变量。
点击 ④ 可以新建一个 Environment,并创建、编辑、删除变量;点击 ⑤ 则是直接对全局变量进行创建、编辑、删除,这里的全局的意思是在发起一个请求时不设置 Environment 也能使用的变量。
点击上图的 ④ 或 ⑤ 都会打开一个设置参数的面板,区别就在于 ⑤ 无需设置 Environment 的名称。
需要注意啊,如果你把变量设置在了 Environment 而不是全局的,需在发送请求之前,设置当前所使用的 Environment,点击 ① 处就能选择 Environment 了。
我就这么用了一阵子,也没什么事,老老实实的开发我的 APP,直到测试找上门来,说不对啊,你这 App 上的数据不对啊,还有有的时候半天都没数据,那个 Loading 动画一直在转,人家 iOS 都是好的。这我哪能忍,经过我一番排查,结果发现是服务器的问题,于是我就让测试再遇到这种情况,自己用 Postman 测试一下,自己去看数据。可人家又嫌每次都得用一下 Postman 太麻烦,于是我又发现了一个 Postman 功能,Test。
Test
Test 可以对每个请求及响应执行相应的测试逻辑,比如延迟是否超过 200ms,服务器响应是否为 200 等等,测试逻辑所采用的编程语言是 JavaScript。
每个请求都有一个 Tests 的 Tab,在 Tests 下方的编辑框中可以自行编写代码,相应的每个响应也都有一个 TestResult,在这里展示每一个 Test 的执行结果,是通过还是失败,如果是失败还有具体的原因。
下面就来简单测试一下,测试的项目是响应时间少于 200ms 和是否成功响应「是否成功响应,直接判断服务器返回的状态码是否为 200」。
可以看到,这次的测试有一个通过,一个失败的,失败的原因是请求时间为 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 的功能。
依次点击箭头所指的图标就能进入 Collection runner 面板。
看上图,A 区当前 Collection 所有的接口,可以选择执行范围,默认是整个 Collection,B 区则是选择的将要进行测试的接口,每个请求还可以进行拖动排序;C 区就是对整个测试的配置,比如执行几遍,每个请求间隔多少毫秒,是否保存响应等等,配置完成后就可以执行了。
这个是测试结果,我对单个 Collection 中的单个接口进行了三次的请求。在这个页面上,也是可以对每一次的请求查看每个请求的信息,包括请求地址、Header、Response、响应 Header、响应 Body。
而且还能导出,把单次请求结果进行导出,导出的文件也是 JSON 格式的,很方便查看。
没想到 Postman 还挺好用的哈,赶紧推荐给测试,下次数据再出问题,让他直接找后台去,还有数据摆在面前,想跑都到不掉。
对了,如果登录 Postman,Postman 还会把 Collection 和变量 Environment 保存在云端,多个设备之间会自动同步。
参考资料
关于我
本文封面图:Photo by Ian Schneider on Unsplash