0


Postman小工具大妙用

文章目录

写在前面

postman 大家都会用,但是很多人只是把它当作一个简单的http客户端。大部分时候,这就够了,因为http调用就是它的最核心的功能。

那么,这样一个“小”工具,究竟还有什么值得再说两句呢?

开发完一个restful功能,后端应该自测完毕后等待与前端联调。这个自测包括单元测试和接口测试,只要完成其中之一,都能大大减少联调的耗时,但是往往两个都没好好完成。更可能的情况是,因为接口拷贝、设值麻烦、更习惯使用图形化界面操作等原因,最终接口测试与前端联调并行。

假如你自测做的很好,那么可以再考虑一些细节,比如

  1. 使用 environment 来避免测试不同的环境时反复修改host
  2. 使用 collection runner 通过接口处理一些线上小规模数据,不用再写代码进行处理

总之,postman 提供了所见即所得、方便、快捷的一种选择,所谓技多不压身。

基本概念

UI基本结构

在这里插入图片描述

collections

collection

是一组请求的集合,和普通的文件夹的区别不大,完全可以一样看待。

collection` 可以定义脚本、运行 `collection runner
collection` 下可以继续递归创建子文件夹,这些子文件夹和 `collection` 一样可以定义脚本、运行 `collection runner

variables

variable

即变量,允许你通过引用在 collection、request、script 等处复用。引用的方式就是使用占位符,如

{{变量名}}

,这样只要修改

variable

的值,所有

{{变量名}}

的地方都会一起变更。

变量优先级

在这里插入图片描述

global、environment 变量可以直接在 postman 右上角配置。

在这里插入图片描述

collection 变量需要点击

collection

Variables 进行添加

在这里插入图片描述

data 变量则是来源于外部文件,一般在 collection runner 时会使用到。

local 变量则是在脚本处定义,生命周期最短。

environments

可以理解为是特殊的

variable

的集合, 因为一些变量如 url 不同环境使用的是不同的值,为了避免反复修改

variable

的值,可以将

variable

定义在 environment 里,通过右上角切换。

{{url}}/api/resource/id=3

Scripts

我们可以在

collection

、各文件夹、

request

定义脚本。

脚本分为 Pre-request 和 Post-response 两类,顾名思义,不需要多加解释。

在这里插入图片描述

request

会先按顺序执行自身、当前文件夹、父文件夹…

collection

的 Pre-request 脚本,然后执行

request

,再按相反顺序执行 Post-response 脚本。

因此, Pre-request 脚本一般负责处理加签、数据加密、数据预处理等; Post-response 脚本处理解密、测试断言等。官网 有很多案例可以参考。

回顾下前面所说的

variable

的优先级范围,可以用脚本来测试下

// global var 'score' = 0
// collection var 'score' = 1
// environment var 'score' = 2

// first request run
console.log(pm.variables.get('score')); // outputs 2
console.log(pm.globals.get('score')); // outputs 0
console.log(pm.collectionVariables.get('score')); // outputs 1
console.log(pm.environment.get('score')); // outputs 2

// second request run
pm.variables.set('score', 3);//local var
console.log(pm.variables.get('score')); // outputs 3

// third request run
console.log(pm.variables.get('score')); // outputs 2

Collection Runner

位置:workspace 右下角、文件夹右键菜单 > Run Folder

注意事项: 免费版一个月最多只能执行 25次,还算够用。

在这里插入图片描述

需要特别注意的是

  1. 延迟无所谓,runner 实际执行为单线程
  2. 导入data文件后,注意使用预览功能检查下postman解析和预期是否一致
  3. 勾选 Persist responses,方便查看失败请求的响应
  4. runner 是单线程,特别大的数据不适用

Data File

支持 csv 和 json 两种格式,注意,json 格式并不是将 json 报文直接导入,举个例子,以下两种格式效果是一致的。

id,name
1,alice
2,bob
[
{"id":"1","name":"alice"},
{"id":"2","name":"bob"}
]

运行效果

在这里插入图片描述

实践技巧

接口快速导入导出

postman左上角的 import 功能提供了多种方式导入

在这里插入图片描述

只是 debug 少量接口的时候,不需要使用抓包工具,可以使用浏览器自带的开发者工具来快速导入接口。

在这里插入图片描述

同理,也可以使用 postman 的代码功能快速生成 curl、wget 命令。

在这里插入图片描述

Collection Runner

如何直接导入json报文

有的时候,为了方便,我们想要一行放一个json报文,便于

request

里直接引用,csv文件内容如下

json
{"id":"1","name":"alice"}
{"id":"2","name":"bob"}

可惜,postman 会解析失败,原因是双引号和逗号在csv中都有特殊逻辑,我们可以采用如下办法解决

  1. 将原 data 文件的双引号先替换为单引号,同时前后添加双引号表明是一个数据
json
"{'id':'1','name':'alice'}"
"{'id':'2','name':'bob'}"
  1. request 中的请求报文先置为空,即 {}
  2. 添加 Pre-request 脚本进行处理
// 将修改的单引号恢复为双引号
let s = pm.iterationData.get("json").replaceAll("'", '"');
// 将前后多余的双引号去除,并设置为请求报文
pm.request.body.raw = s.substring(1, s.length - 1);

如何快速收集失败的case

使用 collection runner 后,有时候会遇见部分失败的情况,但是 postman 没有提供仅重试失败数据的功能,必须自己将失败的数据单独取出来重试。

而 collection runner 提供的导出功能,并不包含请求报文和响应报文,但是导出数据可以发现包含了url和测试的名字,因此可以在这里做文章,如通过下面的做法将关键数据导出,然后再通过正则取出失败数据,再重新跑 collection runner

pm.test(pm.iterationData.get("billCode"), function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.success).to.eql(true);
});

响应报文解密如何展示

postman 的

response body

不能通过

post-response

脚本修改,直接输出到控制台总觉得不太方便。此时,我们可以使用 postman 的 visualize 功能来近似

// 使用<pre>标签可以保留文本格式,当然也可以自己实现更复杂的html功能
pm.visualizer.set('<pre>{{json}}</pre>', {
            json: decryptJson
        });

参考文献

Postman JavaScript Reference


本文转载自: https://blog.csdn.net/code_oppa/article/details/141092929
版权归原作者 小江的学习日记 所有, 如有侵权,请联系我们删除。

“Postman小工具大妙用”的评论:

还没有评论