Postman API 接口测试、Jenkin 持续集成测试

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

RESTFul接口测试不依赖其他端,进度不受影响

测试脚本即文档,减低沟通成本,对接时直接导出给前端即可

造数据,Runner指定运行N次,构造大量数据,对统计、分页测试很有用

减少问题排查时间,有时候对接端由于HTTP Header或参数指定有误导致数据异常,可直接用Postman测试,同时直接提供证据

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

应用结构

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

发起请求

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

简单接口测试

前置脚本

后置脚本

环境变量

结果渲染

下面通过案例,逐一说明 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 设置随机参数的方式有多种,如:

使用 Postman 随机值

使用变量 + 前置脚本设值

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 库。

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

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

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

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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwzjx.html