Postman是一款非常流行的接口调试工具,它使用简单,而且功能也很强大,不仅测试人员会使用,开发人员也会经常使用它进行接口的测试
官方网站: Postman
主要特点:
(1). 简单易用的图形用户界面
(2). 可以保存接口请求的历史记录
(3). 使用测试集Collections可以更有效的管理组织接口
(4). 可以在团队之间同步接口数据
(5). 下载地址: https://www.getpostman.com/apps
postman数据集
postman高级用法
1.用例管理 2.postman的断言 3.全局变量与局部变量 4.请求前置脚本 5.请求关联 6.用例批量执行 7.读取外部文件实现参数化 8.测试报告产出1.用例管理
在测试活动中, 针对需求和接口文档进行用例设计时, 我们会发现针对一个需求或一个接口要考虑多种情况, 设计的用例要尽量覆盖需求. 在接口测试中, 如果使用工具(postman, Jmeter)实现, 需要对用例进行管理.
postman具有用例管理的功能, 具体的实现步骤如下:
1. 创建测试集-Collection可以理解成一个项目(系统),包含多个接口请求 2. 创建目录- Folder可以理解成一个项目模块 3. 添加请求-
具体操作步骤及截图如下:
(1).创建测试集- 点击‘New Collection’,在弹出框中输入测试集的名称和其他信息,再点击‘Create’按钮
(2).创建目录- 在测试集上点击右键选择‘Add Folder’,在弹出框中输入目录的名称和其他信息,再点击‘Create’按 钮
(3).添加请求- 在目录上点击右键选择‘Add Request’,在弹出框中输入请求的名称和其他信息,再点击保存按钮
2.Postman断言
断言, 是让程序判断预期结果与实际结果是否一致的. python中有断言的语法, postman中也可以实现断言. 先看python的实现吧!
2.1 python中断言
# 断言:
python中的断言使用assert来实现, 其语法形式为: assert 表达式, '断言信息'
如果断言通过, 则继续执行断言以下的代码. 如果断言未通过, 则程序直接抛出异常, 异常名称为: AssertionError, 异常信息为: 断言信息, 如未指定断言信息, 则不显示断言信息.
# 示例1: 断言不指定断言信息
def func(a):
assert a == 1
func(2)
# 结果为:
/Users/jeremy/.virtualenvs/h2005/bin/python /Users/jeremy/MyData/edu/code/demo2.py
Traceback (most recent call last):
File "/Users/jeremy/MyData/edu/code/demo2.py", line 104, in
func(2)
File "/Users/jeremy/MyData/edu/code/demo2.py", line 97, in func
assert a == 1
AssertionError
# 示例2: 断言指定断言信息
def func(a):
assert a == 1, '断言未通过'
func(2)
# 结果为:
/Users/jeremy/.virtualenvs/h2005/bin/python /Users/jeremy/MyData/edu/code/demo2.py
Traceback (most recent call last):
File "/Users/jeremy/MyData/edu/code/demo2.py", line 104, in
func(2)
File "/Users/jeremy/MyData/edu/code/demo2.py", line 97, in func
assert a == 1, '断言未通过'
AssertionError: 断言未通过
# 示例3: 断言配合异常处理使用, 尝试执行断言, 如果断言通过则执行断言以下代码, 如果断言未通过, 则直接抛出的异常会被except捕获, 执行except代码. 注意: 此过程由于异常处理的原因, 断言没有机会将异常抛给用户而被except捕捉, 所以断言信息是没有机会显示的.
def func(a):
try:
assert a == 1,
print('pass, 用例通过!')
except:
print('fail, 接口存在问题!')
func(2)
# 结果为:
'fail, 接口存在问题!'
2.2 常用postman断言特点与简单使用
# postman断言特点:
(1).Postman的断言是使用Javascript语言编写的,写在‘Tests’标签页里
(2).Tests中的脚本在发送请求之后执行,会把断言的结果(PASS/FAIL)最终在‘Test Results’标签页中展示
简单使用:
2.3 postman常用断言
# 注意:
1.断言响应状态码是否为200(重点掌握)
2.断言响应体JSON数据校验(重点掌握)
3.断言响应体是否包含指定字符串
4.断言响应体是否等于指定字符串
5.断言响应头是否包含指定的头信息
# 断言代码片段介绍(不用背下来, 但是你需要在postman中能够找到, 你看别人的断言能看董)
1. 判断响应状态码是否等于200 (*****)
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
2. 判断响应体中是否包含指定的字符串 (****)
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search"); });
3. 判断响应体数据是否等于指定的字符串 (***)
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string");
});
4. 校验响应的JSON数据 (*****)
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.mesage).to.eql("ok");
});
5. 判断响应头中是否包含指定的头标签
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type");
});
2.4 排错技巧
当你的断言出现错误时, 需要进行排错, 可以按照以下套路进行:
# 1.检查断言代码片段是否错选了
当断言出现错误时, 我们应首先确定自己的断言代码片段是否是正确的, 比如要判断json数据某个键的值是否包含另一个值, 但却选择了等于.
# 2.检查断言代码是否设置了错误的字段
断言中对结果的判断要根据响应数据的形式进行严格的比对, 不细心很可能出现错误. 比如: json数据中的一个键名为data, 在编写断言代码的过程中却写成了date
# 3.发送请求, 基于响应数据做初步预判
断言是对接口响应数据的检验, 那断言可定是在请求发送后执行的. 所以当断言出现错误, 这是你一定已经发送了请求, 我们可以打开响应数据进行对比, 来判断断言的执行结果是否存在问题.
# 4.检查请求相关参数
在构造请求时, 可能请求出现了错误, 比如请求方式为post, 但默认为get, 却忘记修改, 当发送请求后获取到的响应数据肯定不是预期的结果, 这时断言就会出错. 应当仔细检查请求的正确性. 请求的正确性可以从以下这几个方面考虑->(请求方法, 请求地址, 请求头信息, 请求体)
# 注意:
当断言出现错误, 经过一系列的排查依然不行, 该怎么办呢? 这是我们可以保存原有断言错误的请求, 重新建立请求, 不要受前一个请求的思维影响, 一步一步的构建请求, 再次尝试.
3.postman设置环境变量
3.1 环境变量与全局变量
全局变量: 作用范围是针对postman下面所有测试集均生效
环境变量:
- 只对选择了对应环境变量的测试集生效
- 环境一般分为: 开发环境, 测试环境, 生产/线上环境(部分公司可能在测试与生产之间存在预生产环境)
- 一套环境中变量不能重复, 但是可以定义多个不重复的变量
3.2 手动设置全局变量与环境变量
(1).全局变量
(2).环境变量
3.3 代码设置全局变量与环境变量
# 在Tests中编写如下代码实现变量的设置, 需要发送请求
# (1).全局变量的设置
pm.globals.set("variable_key", "variable_value");
# (2).环境变量的设置
pm.environment.set("variable_key", "variable_value");
# 注意: 通过代码实现环境变量的添加, 需要先选中一个环境, 才能设置成功.
3.4 变量的使用
无论在URL中, 还是在请求头中, 或是在请求体中都可以使用{{variable}}的方式使用变量, 但需要注意的是请求体中传递JSON数据一般我们会给实际的值加引号, 比如一个字符串. 但在使用变量时, 不要给{{variable}}添加引号, 否则postman会将“{{variable}}”当做一个字符串.
使用代码获取:
// 获取全局变量
var value = pm.globals.get("var_name");
// 获取环境变量
var value = pm.environment.get("var_name");
4.请求前置脚本
4.1 请求前置脚本实现与场景
// 请求前置脚本
请求前置脚本就是在请求发送前执行的脚本, 请求前置脚本需要写在“Pre-request script”标签中.
应用场景:
- 请求参数中包含一个随机数或者时间戳
- 请求之前需要对请求参数做进一步处理(如:对敏感参数进行加密)
4.2 请求前置脚本案例
//需求:
请求TPshop项目中获取图片验证码的接口,需要在URL中设置随机数
// 请求路径:
http://localhost/index.php?m=Home&c=User&a=verify&r=0.6569606479434671
// 分析:
- 在请求图片验证码前, 执行生成随机数的脚本: var r = Math.random();
- 将生成的随机数保存至环境变量中
- 请求图片验证码接口是从环境变量中取出随机数, 作为参数传递给服务器


