Postman 介绍

🍕 Postman是一个简单的接口测试工具,被广泛应用于API设计、构建、测试等工作环节,同样适用于API安全测试和管理。

1 常见请求

  • 常见请求
    • 查询参数接口
    • 表单类型接口
      • 请求头为Content-Type: application/x-www-form-urlencoded的接口地址。
      • 在Postman的请求页面中选择Body的x-www-form-urlencoded填写参数内容。
    • 上传文件接口
      • 请求头为Content-Type: multipart/form-data的接口地址。
      • 在Postman请求页面中,选择Body的form-data填写参数内容。
    • Json类型接口
      • 请求头为Content-Type: application/json的接口地址。
      • Postman请求页面中,选择Body的raw以Json格式填写内容。

常见请求

2 Postman

  • Postman
    • 官方下载安装后注册账号,登录使用:https://www.postman.com/downloads/
    • Create new collection:添加用例集,Documentation是用例集描述(非必填项)。
    • Add folder:添加模块。
    • Add request:添加请求,Headers(请求头)、Body(请求体是Json时候选择raw)。
    • Export:导出用例集。
    • Import:导入用例集,若已存在同名的用例集,则Import as Copy,即导出一个拷贝份,不建议Replace替换。
    • 注意:Postman是按串行方式发送请求,无论执行多少次,后台接收请求也是按顺序来,无法实现并发功能。
    • 参考:Postman中文文档Postman官方文档

Postman

2-1 前置脚本

  • 前置脚本
    • 即在Pre-request Script中编写的JavaScript脚本,请求发送之前,会先执行该前置脚本。
    • 接口测试时该功能非常有用,对于一些复杂场景也支持使用前置脚本处理后再请求接口。

Postman-前置脚本

2-2 日志调试

  • 日志调试
    • 打印日志的JavaScript语句:console.log("日志内容"),放在Pre-request Script或Tests中。
    • 菜单栏 > View > Show Postman Console,或选Postman,快捷键Ctrl + Alt + C按钮打开。
    • 界面功能
      • Show raw log:查看原始报文。
      • All Logs:按日志级别定位错误。
      • Show timestamps:查看时间戳。
      • Hide network:隐藏请求,只查看输出日志。

Postman-日志调试

2-3 常用断言

  • 常用断言
    • 借助JavaScript语言进行代码的编写,自动判断预期结果与实际结果是否一致。
    • 断言代码写在请求的Tests标签中,请求Response中的Test Results即断言结果。
    • 按响应的组成划分,分别是状态行(包括状态码、状态消息)、响应头、响应体。
    • 工作原理(由上往下依次执行):请求发送之后,再执行Tests内容。
      • Postman界面:组织http请求方法、请求头、请求体、url等。
      • Postman内部:分析http请求方法、请求头、请求体、url等。
      • 服务器:接收Postman发送过来的请求后,解析http请求,回发http响应。
      • Postman内部:执行断言代码,得到断言结果。
      • Postman界面:在Test Results中显示断言结果。

(1) 状态行

  • 断言状态码:Status code: code is 200
1
2
3
4
5
6
7
8
// pm代表Postman的一个实例,test()是Postman实例的一个方法,有以下两个参数
// 参数一:断言结束后给出的文字提示(可自定义修改)
// 参数二:匿名函数

pm.test("Status code is 200", function () {
// 响应结果中应该包含状态码200
pm.response.to.have.status(200);
});
  • 断言状态消息:Status code: code name has string
1
2
3
4
pm.test("Status code name has string", function () {
// 断言响应状态消息包含OK
pm.response.to.have.status("OK");
});

(2) 响应头

  • 断言响应头:Response headers: Content-Type header check
1
2
3
4
pm.test("Content-Type is present", function () {
// 断言响应头包含Content-Type
pm.response.to.have.header("Content-Type");
});

(3) 响应体

  • 断言响应体包含字符串:Response body: Contains string
1
2
3
4
pm.test("Body matches string", function () {
// 获取响应体包含字符串string_you_want_to_search
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
  • 断言响应体等于字符串:Response body: is equal to a string
1
2
3
4
pm.test("Body is correct", function () {
// 获取响应体等于字符串response_body_string
pm.response.to.have.body("response_body_string");
});
  • 断言响应体中某个键名对应的值:Response body: JSON value check
1
2
3
4
5
6
pm.test("Your test name", function () {
// 获取响应体,以Json形式显示,赋值给jsonData
var jsonData = pm.response.json();
// 获取jsonData中键名为value的值,然后和100进行比较
pm.expect(jsonData.value).to.eql(100);
});

(4) 响应时间

  • 断言响应时间,一般用于性能测试:Response time is less than 200ms
1
2
3
4
pm.test("Response time is less than 200ms", function () {
// 断言响应时间小于200ms
pm.expect(pm.response.responseTime).to.be.below(200);
});

2-4 变量设置

  • 变量设置
    • 作用域
      • 作用域范围从大到小为:全局变量 > 集合变量 > 环境变量。
      • 在不同范围内申明相同变量时,会优先使用范围最小的变量。
    • 环境变量(Environments)
      • 全局变量(Globals):Postman中全局生效的变量,全局唯一。
      • 特定环境(生产环境、开发环境、测试环境等)下生效的变量,在本环境内唯一。
    • 集合变量:针对集合的变量,声明的变量必须基于某个集合,作用域只针对该集合。
    • 要使用变量中的值,先在Pre-request Script或Tests中设置该变量,然后获取变量。
      • variable_key变量名,variable_value变量值,获取变量使用{{variable_key}}
      • 获取变量值的请求参数指的是:URL、Params、Authorization、Headers、Body。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 设置全局变量
pm.globals.set("variable_key", "variable_value");
// 获取全局变量
pm.globals.get("variable_key");

// 设置环境变量
pm.environment.set("variable_key", "variable_value");
// 获取环境变量
pm.environment.get("variable_key");

// 设置集合变量
pm.collectionVariables.set("variable_key", "variable_value");
// 获取集合变量
pm.collectionVariables.get("variable_key");

(1) 环境变量

Postman-变量设置-环境变量

(2) 集合变量

Postman-变量设置-集合变量

3 接口关联

  • 接口关联
    • 上一个接口的返回数据值,刚好是下一个接口的输入参数,这样两个接口就产生了关联。
    • 实现思路:提取上个接口的返回数据值,将其保存到环境变量中,下个接口获取变量值。
    • 例如:上个接口返回北京的经纬度坐标,将其保存到环境变量中,下个接口获取经纬度坐标值查询地点。

3-1 返回经纬度

接口关联-返回经纬度

3-2 经纬度查询

接口关联-经纬度查询

4 集合测试

  • 集合测试
    • Run manually:默认手动运行,可选计划执行(Schedule runs)或集成自动化命令运行(Automate runs via CLI)。
    • Iterations:集合运行的迭代次数。
    • Delay:每个请求之间的时间间隔。
    • Data:用于测试的数据文件,参数化文件。
    • Persist responses for a session:保持会话的响应,勾选执行后可查看响应体和响应头。
    • Stop run if an error occurs:如果集合中的任意请求在运行时报错,则会停止批量运行。
    • Keep variable values:保留运行时使用的变量值。
    • Run collection without using stored cookies:在不使用存储cookies的情况下批量运行。
    • Save cookies after collection run:批量运行后将使用的cookies保存到cookie管理器中。

集合测试

4-1 Schedule runs

  • Schedule runs
    • 允许在预定的时间间隔内自动运行集合中的请求,可以设置运行的时间、频率和持续时间。
    • 主要适用于自动化测试和定期运行请求的场景,旨在帮助保持API请求的一致性和稳定性。

集合测试-Schedule runs

4-2 Monitors runs

  • Monitors runs
    • 主要用于在生产环境中监控和管理API的性能和可用性,定期发送API请求并获取响应时间等指标。
    • 监视器还提供了报警通知、实时监控和历史记录等功能,以便及时发现和解决API请求的潜在问题。
    • 参数说明
      • Run this monitor:时间调度,设置固定时间来执行集合。
      • Receive email notifications for run failures and errors:失败和错误发送邮件通知。
      • Retry if run fails (This might affect your billing.):如果集合测试运行失败则重试。
      • Set request timeout:设置请求超时的时间。
      • Set delay between requests:设置请求之间的延迟时间。
      • Follow redirects:跟随重定向,勾选则Postman会自动发送新的请求到重定向的URL。
      • Enable SSL validation:启用SSL验证,确保请求和响应在传输过程中是加密和安全的。
      • Run之后,点击Pause将暂停正在运行的监视器,再点击Resume恢复当前监视器的运行。

集合测试-Monitors runs

4-3 Newman的使用

  • Newman的使用
    • 集合测试的另一种方式是使用Newman,Postman Newman是一款由Postman开发的命令行工具。
    • 使用Newman之前,需要先安装Node.js,然后使用命令npm install -g newman安装Newman。
    • 在Postman中以Json文件方式导出要测试的集合,以及对应的环境变量,就可以命令运行集合了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 无环境依赖的情况下,只运行集合
newman run <collection_name>
newman run 常用接口.postman_collection.json

# 运行集合和环境
newman run <collection_name> -e <environment_name>
newman run 常用接口.postman_collection.json -e workspace.postman_globals.json

# 使用所需的编号运行集合的迭代
newman run <collection_name> -n <no.of_iterations>
newman run 常用接口.postman_collection.json -n 3

# 运行数据文件
newman run <collection_name> --data <file_name> -n <no.of_iterations> -e <environment_name>
newman run 常用接口.postman_collection.json --data data.csv -n 3 -e workspace.postman_globals.json

# 设置延迟时间,单位毫秒
newman run <collection_name> -d <delay_time>
newman run 常用接口.postman_collection.json -d 500

5 Mock服务

  • Mock服务
    • Mock定义
      • 一种特殊测试技巧,可以在没有依赖项的情况下进行接口或单元测试。
      • Mock服务不是一个真实的服务,而是一个被伪装成真实服务的假服务。
    • Mock服务的两种类型
      • 私有Mock
        • 头像>Settings>API keys>Generate API Key>命名为x-api-key>复制生成的密钥。
        • 在Postman的Mock servers中,创建Mock服务,配置中勾选Make mock server private
        • Mock服务创建完成后,Collections中生成的请求Headers里添加x-api-key和密钥内容。
      • 公有Mock:可以被任何人访问,不需要使用Postman API Key。
    • Next > Configuration
      • Mock Server Name:Mock服务名称。
      • Environment:选择已有环境,或勾选Save…将服务地址保存为一个新环境变量。
      • Simulate a fixed network delay:模拟固定的网络延迟,默认No delay selected。
      • Make mock server private:设置为私有Mock服务。

5-1 参数内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// Request Body
{
"city":"厦门"
}

// Response Body
{
"status":"200",
"msg":"success",
"infocode":"10000",
"lives":[
{
"province":"福建",
"city":"厦门市",
"adcode":"350200",
"weather":"晴",
"temperature":"7",
"winddirection":"东北",
"windpower":"4",
"humidity":"57",
"reporttime":"2022-08-22 08:34:17",
"temperature_float":"7.0",
"humidity_float":"57.0"
}
]
}

5-2 创建Mock

Mock服务-创建Mock

5-3 Mock请求

Mock服务-Mock请求

6 APIs设计

  • 设计开发API
    • 创建API > 定义API > 测试API > 部署API > 监控API。
    • 定义API:入参、出参、方法、响应的定义(主要)。
    • 测试API:测试与自动化(Collections、Automate)。

6-1 创建API

设计开发API-创建API

6-2 定义API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# 指定使用的OpenAPI规范的版本
openapi: '3.0.0'
# 包含API的基本信息,包括版本、标题和描述
info:
version: '1.0.0'
title: 'Sample API'
description: 图书信息查询

# 定义API的路径和请求方法,这里只定义/books路径的get请求方法
paths:
# 定义API路径
/books:
# 定义API的请求方法
get:
summary: 获取图书信息
operationId: listBooks
# 定义API请求的响应内容,这里定义了成功响应200和错误响应500
responses:
'200':
description: 返回图书信息数组
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Book'
'500':
description: 出现意外错误
content:
application/json:
schema:
$ref: '#/components/schemas/Error'

# 包含API的组件,包括数据模型Book和Error的定义
components:
schemas:
Book:
# 数据模型的类型
type: object
# 指定数据模型中的必填属性
required:
- id
- title
- author
- isbn
- price
# 定义数据模型中的属性
properties:
id:
# 指定属性的数据类型
type: string
# 提供属性的描述信息
description: 图书的唯一标识符
title:
type: string
description: 图书标题
author:
type: string
description: 图书作者
isbn:
type: string
description: 图书ISBN
price:
type: number
format: float
description: 图书价格
description:
type: string
description: 图书简介
Error:
type: object
required:
- message
properties:
message:
description: A human readable error message
type: string
# 定义API的安全方案,包括一个名为ApiKey的API密钥认证方式
securitySchemes:
ApiKey:
type: apiKey
in: header
name: X-Api-Key

# 定义API的安全要求,指定使用ApiKey认证方式
security:
- ApiKey: []

6-3 测试API

  • 测试API
    • 由于定义好的API没有设置baseUrl,测试集合没办法直接执行。
    • Postman可以直接生成定义好的Flask等代码,下载到本地运行。
      • 解压zip后将yourCompany目录名改为books,在当前目录下打开命令窗口。
      • 在解压zip的目录下执行环境依赖:pip install -r requirements.txt
      • 设置环境变量FLASK_APP,程序主模块名books:set FLASK_APP=books
      • 设置环境变量FLASK_ENV,默认production:set FLASK_ENV=development
    • 命令窗口执行flask run,浏览器打开地址验证:http://127.0.0.1:5000/books
      • 访问成功后,进行本地Mock,将Postman中的baseUrl设置为127.0.0.1:5000。
      • 由Postman生成的API Flask代码只有接口相关内容,没有后台数据对应的存储。
      • 若测试集合要完全呈现接口功能,需要将生成的API Flask代码改写优化再Mock。

设计开发API-测试API


Postman 介绍
https://stitch-top.github.io/2022/07/21/ce-shi-gong-ju/tt04-postman/tt01-postman-jie-shao/
作者
Dr.626
发布于
2022年7月21日 21:50:23
许可协议