Postman 是一个创建和使用API的应用,Postman 对于Web开发者来说非常有用,Postman 带来的便利有很多,诸如:

  • RESTFul接口测试不依赖其他端,进度不受影响
  • 测试脚本即文档,减低沟通成本,对接时直接导出给前端即可
  • 造数据,Runner指定运行N次,构造大量数据,对统计、分页测试很有用
  • 减少问题排查时间,有时候对接端由于HTTP Header或参数指定有误导致数据异常,可直接用Postman测试,同时直接提供证据

总的来说,Postman是一个非常有用且好用的 API 测试和管理工具。

应用结构

Postman 程序的应用结构可以左、中、右三个区域,左边是功能区、中间是接口测试区,右边是文档区域,这三个区域是平时经常接触的地方,除此之外,底部还有控制台和Postamn Runner,如下图:

发起请求

发起 HTTP 请求进行接口测试是 Postman 的核心功能,很多开发者用 Postman 最初的目的就是用它发起 HTTP 请求进行接口测试,其实 Postman 的发起 HTTP 请求也涉及很多操作,如:

  1. 简单接口测试
  2. 前置脚本
  3. 后置脚本
  4. 环境变量
  5. 结果渲染

下面通过案例,逐一说明 Postman 这些功能的使用方式。

简单接口测试

Postman 的简单接口测试是最基本但用得最多的测试,这个操作跟使用浏览器直接访问接口差不多,不同的是 Postman 可以选择请求方式,比如 GET,POST,DELETE等,假设需要测试下面这样的一个 SpringMVC 接口:

@GetMapping("/{id}")
public ResponseEntity<User> user(@PathVariable("id") String id) {
User user = new User();
user.setId(id);
user.setName("HiIT青年");
return ResponseEntity.ok(user);
}

你只需要在 Postman 创建 GET 请求接口,然后填写对应的请求地址,然后点击 Send 即可,如果请求的接口没有异常,那么可以看到下面这样的结果:

这种操作方式是最简单的,也是最常用的,其中:

  • GET 下拉可以切换请求方式
  • Params 指定挂在URL上的参数
  • Authrization 指定接口授权方式
  • Headers 可以设置额外的请求头
  • Body 主要用于设置 POST 请求体,可以用多种数据格式
  • Pre-request Script 是前置脚本
  • Tests 是后置测试脚本
  • Settings 是一些设置,如SSL证书校验、URL编码等

简单的方式,存在很多弊端,最明显的就是请求接口的返回值需要肉眼校验是否正确,当然 Postman 支持用 JavaScript 来编写测试。

前置脚本

在简单接口测试部分,使用一个随机参数 t=20210814,这个参数对于接口来说没有任务作用,但有时候,接口测试就真都需要这些随机参数,Postman 设置随机参数的方式有多种,如:

  1. 使用 Postman 随机值
  2. 使用变量 + 前置脚本设值

Postman 提供了动态变量可以用于设置参数随机值,如:

{{$guid}}:用于生成guid随机值
{{$timestamp}}:以当前时间秒数作为随机值
{{$randomInt}}:随机生成0~1000的整数
....

另外,可以随机参数还可以使用前置脚本来设置。

首先,在Collections创建一个变量(timestamp),也可以用环境变量,效果都一样。

编写前置脚本,在请求发起前,为变量 timestamp 设置值:

var timestamp = new Date().getTime()
pm.collectionVariables.set('timestamp', timestamp)

最后把 t 的取值由 {{$guid}} 改为 {{timestamp}} 即可。

后置脚本

Postman 后置脚本是指 Tests 部分编写的 JavaScript 脚本,这部分功能非常强大,不仅可以使用 JavaScript 编程来获取返回值数据,还可以将返回结果渲染成页面(图表),而且还支持引入外部 JavaScript 库。

http://localhost:8080/user/1?t={{timestamp}}

这个接口拉取的是 ID=1 的用户数据,假如需要测试返回的数据 ID 是不是等于 1,那么可以用下面的脚本来测试。

可以看到,测试结果为 “PASS” 如果把 equal("1") 改成 equal("2") 那么测试将会失败:

FAIL test id == 1 | AssertionError: expected '1' to equal '2'

可以说,使用后置脚本就像给整个接口测试流程注入生命,比如,一些授权接口需要获取 ticket,然后其他接口需要用这个 ticket 来授权,那么就可以在请求 ticket 后将它设置到变量中:

var jsonData = pm.response.json();
pm.test("ticket exists", function () {
pm.expect(jsonData.ticket).exist
});
pm.collectionVariables.set('ticket', jsonData.ticket)

另外,Tests 还可以发起新的 HTTP 请求:

pm.sendRequest('http://localhost:8080/user/ticket/1', (error, response) => {
if (error) {
console.log(error);
}
pm.collectionVariables.set('ticket', response.json().ticket)
});

关于 Tests 的调试信息,可以通过 Postman 底部的 Console 来查看。

环境变量

Postman 的环境变量方便开发针对不同的环境进行切换,而接口方面不用做任何调整,这一点对开发者来说也是很有用的,因为在开发中过程一般都有很多个环境,比如:

  1. 开发环境:开发自己的电脑运行的程序
  2. 测试环境:测试服务器上运行的程序
  3. 预发布环境:测试通过后,进行试运行的程序
  4. 线上环境:真正为服务器上运行的环境

Postman 运行用户创建多个运行环境,举个例子,创建 “开发” 和 “测试” 这两个环境,并在不同的环境中定义不同的变量(host:IP,port:端口)

将请求 URL 调整为取环境变量值:

http://{{host}}:{{port}}/user/1?t={{timestamp}}

这样,针对不同的环境测试,就不用改IP、端口,只需要切换运行环境即可。

结果渲染

结果渲染这部分感觉实际用得不是很多,但也不是说没有用,比如:想要将结果渲染成表格,或者说报表就可以用到这个功能。

这一块还是在后置脚本(Tests)中处理,以渲染表格为例:

渲染图表案例:

接口文档

Postman 接口文档位于 Postman 界面的最后测,接口文档支持 Markdown 编写,这个对于程序员来说非常友好,可以根据需要为集合(Collections)或者接口编写对应的文档。

另外,除接口文档外,Postman 的 example 也是非常有用,它可以把每种请求接口保存为一份示例,这样,不管是成功,还是失败,都可以快速查看返回数据格式(这对对接非常有用)。

下面是一份成功请求的示例:

接口授权

Postman 的接口鉴权管理在 Collections 的 Authoriztion 中,开发者可以通过 Type 选择鉴权的方式,包括 ApiKey,BasicAuth,OAuth2.0等等,传值可以选择 Header 获取 URL参数。

对于鉴权值,可以选择直接填写,也可以使用变量值的形式,比如{{ticket}},如果将其他接口(比如登录接口)的返回值,设置到环境变量中。

var jsonData = pm.response.json();
pm.test("ticket exists", function () {
pm.expect(jsonData.ticket).exist
});
pm.collectionVariables.set('ticket', jsonData.ticket)

关于 Postman Jenkins 持续集成测试的方法,可以关注公众号 “HiIT青年” 发送 “postman” 查看。

=========================================================



关注公众号,阅读更多文章。

Postman API 接口测试、Jenkin 持续集成测试的更多相关文章

  1. postman+jenkins+newman做接口测试的持续集成

    为何要做接口自动化测试的持续集成? 1. 接口相对稳定,改动少,比起GUI自动化测试来说性价比更加高些,不容易出现GUI自动化那种掉到维护脚本的坑里. 2. 接口测试比较简单,一个规范的接口,测试只需 ...

  2. HTTP API接口测试利器PostMan介绍

    一.什么是API接口测试? API接口有多种,个人将其划分为三类.第一种是函数级别的,测试需要对接口的各个参数进行测试,如:Int getResult(String key, String ID, I ...

  3. Postman+Newman+Jenkins APItest自动化集成测试

    postman做接口测试简单易用很容易上手,但是接口越来越多,每次手动点击runner进行测试不灵活,最近就研究了下newman,利用newman实现接口的自动化测试,但是每次需要命令行操作也不方便, ...

  4. 初步探究Android App API接口测试--实战

    一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...

  5. postman用法总结+newman持续集成

    一.postman 1.GET 请求:点击Params,输入参数及value,可输入多个显示在URL链接上(GET请求的请求头与请求参数如在接口文档中无特别声明时可以不填) 2.POST请求:在bod ...

  6. api接口测试工具和接口文档管理工具

    api接口测试工具和接口文档管理工具 1.postman(https://www.getpostman.com) Postman 是一个很强大的 API调试.Http请求的工具.她可是允许用户发送任何 ...

  7. 实战Rest API接口测试

    一.Android App API接口测试 1.如何学好Android App API接口测试 postman可以用来实现API接口自动化测试,但是也有弊端,无法实现接口测试数据的参数化,为了达到接口 ...

  8. postman自动化接口测试

    背景描述 有一个项目要使用postman进行接口测试,接口所需参数有: appid: 应用标识: sign:请求签名,需要使用HMACSHA1加密算法计算,签名串是:{appid}${url}${st ...

  9. Postman & API

    Postman & API https://www.getpostman.com/ https://www.getpostman.com/downloads/ Postman Canary h ...

随机推荐

  1. 18.自动运维工具ansible

    1 Ansible 介绍和架构 1.1 Ansible介绍 ansible 的名称来自科幻小说<安德的游戏>中跨越时空的即时通信工具,使用它可以在相距数光年的 距离,远程实时控制前线的舰队 ...

  2. FlowNet:simple / correlation 与 相关联操作

    Flow Net : simple / correlation 与 相关联操作 ​ 上一篇文章中(还没来得及写),已经简单的讲解了光流是什么以及光流是如何求得的.同时介绍了几个光流领域的经典传统算法. ...

  3. Spring:Spring优势——分层架构简介

    Spring框架采用分层架构,根据不同的功能被划分成了多个模块,这些模块大体可分为 Data Access/Integration.Web.AOP.Aspects.Messaging.Instrume ...

  4. Cent OS下安装JDK11

    自己云服务器以前装了个JDK1.7,最近发现出了jdk11,所以修改一下JDK版本: 我这里用的是Xshell和XFtp工具,下载地址:https://www.netsarang.com/downlo ...

  5. 记两道最近做的pwn题(ciscn_2019)

    这两题为什么要记录呢,一个是我发现网上很多教程没写清楚(也可能是我太菜了),二是细节点很多,不同的大佬方式不太一样,有很多细节需要注意 ciscn_2019_es_2 这题是栈迁移的题,先上exp 1 ...

  6. Java | Random 和 Math 的概述及使用

    Random Random类是java.util的包里面提供的我们常用的API,方便我们操作的,还有非常多像Random一样的类. Random的作用 生成一个随机数字,可以指定范围,也可以真的随机. ...

  7. create-react-app 入门学习

    全局安装 create-react-app npm install create-react-app -g 创建项目 在全局安装了create-react-app 后 创建项目,如果按照下面的第一种办 ...

  8. Springboot中Rest风格请求映射如何开启并使用

    问题引入 因为前端页面只能请求两种方式:GET请求和POST请求,所以就需要后台对其进行处理 解决办法:通过springmvc中提供的HiddenHttpMethodFilter过滤器来实现 而由于我 ...

  9. 从零学习SpringSecurity

    一.简介 SpringSecurity是一个功能强大且高度可定制的身份验证和访问控制框架,和spring项目整合更加方便. 二.核心功能 认证(Authentication):指的是验证某个用户能否访 ...

  10. SpringBoot缓存管理(三) 自定义Redis缓存序列化机制

    前言 在上一篇文章中,我们完成了SpringBoot整合Redis进行数据缓存管理的工作,但缓存管理的实体类数据使用的是JDK序列化方式(如下图所示),不便于使用可视化管理工具进行查看和管理. 接下来 ...