02. Postman高级使用
2024年10月28日大约 8 分钟
02. Postman高级使用
目标
- 掌握Postman断言/关联/参数化/测试报告使用
- 能够使用Postman进行接口手工测试
1. Postman断言
能够使用Postman对响应结果自动断言
Postman断言:让Postman工具代替人工自动判断预期结果和实际结果是否一致
Postman断言用法:
Tests
后置脚本标签页,编写JavaScript断言代码- 断言结果(PASS/FAIL)在
Test Results
标签页中展示
选择断言代码片段:
在Tests输入框的右侧配置了一些常用的断言代码片段,点击后自动填写到Tests输入框中,然后再进行修改
1. 响应状态码断言
模板名称:Status code: Code is 200
模板内容:
// 判断响应状态码是否等于200
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("断言 响应状态码 为 200", function () {
pm.response.to.have.status(200);
});
pm: postman的实例
test():postman实例的测试方法
参数1:字符串-测试断言名称,这个参数可以任意修改,不影响断言。
作用:在断言结束后,显示给用户,断言结果的提示文字。
参数2:回调函数-具体断言语句
// 判断是否包含指定的状态码
pm.response.to.have.status(code:number)
// postman的响应结果中,应该有响应状态码200。这里的200是预期结果。
pm.response.to.have.status(200);
2. 包含指定字符串断言
模板名称:Response body: Contains string
模板内容:
// 判断响应结果是否宝行指定字符串
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
// 通过一系列调用链判断是否符合预期
pm.expect() : 接收实际结果
.to :连接符,用于连接断言与判断
.include() : 用于指定断言方式和预期结果
pm.response.text() : 获取相应结果的文本格式数据
// postman期望响应文本中,应该包含"你想搜索的字符串”(预期结果)"
pm.expect(pm.response.text()).to.include("string_you_want_to_search");
3. JSON数据断言
模板名称:Response body: JSON value check
模板内容:
// 校验响应的json数据
pm.test("Your test name", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.value).to.eql(100);
});
pm.test("断言 success 的值为 true", function () {
var jsonData = pm.response.json();
pm.expect(jsonData.success).to.eql(true);
});
pm.response.json() : 获取响应结果的json数据
.eql() : 用于指定断言方式和预期结果
// 将整个json响应体赋值到变量jsonData上。
var jsonData = pm.response.json();
// postman期望json结果中指定key的值为xxx, value能取值:success、code、message
pm.expect(jsonData.value).to.eql(100);
4. Postman 断言工作原理
- 断言工作原理为关联做铺垫
5. Postman扩展
6. 案例
# 针对ihrm系统登录成功接口用例完成断言设置
1. 响应状态码断言
2. JSON数据断言
{
"success": true,
"code": 10000,
"message": "操作成功!"
}
# BASE_URL = http://192.168.10.31:58100
2. Postman自动关联
思考:
- 用户登录后才能访问对应的资源所有接口都需要依赖登录接口返回的token值
- 业务场景:新增员工—> 查询员工—> 修改员工—> 删除员工,后三个接口依赖新增员工接口返回的员工id
1. 简介
当接口和接口之间,有依赖关系时,需要借助 postman 关联技术,来实现。
如: 登录接口返回的令牌数据,被添加员工接口依赖。添加员工接口返回员工id,被 查询员工接口依赖。
应用场景:接口之间有依赖关系
2. 自动关联实现步骤
假定:接口B产生的数据,被接口A依赖。
- 发送接口B请求,获取响应数据。
- 将响应数据,放入公共容器(全局变量、环境变量)中
- 接口A从公共容器中,提取数据,发送请求。
3. 核心代码
// 1.提取响应数据
var jsonData = pm.response.json();
// 2.设置环境变量(将数据写入到公共容器(全局变量、环境变量)中)
// 2.1 全局变量做容器: 在整个postman生效,
pm.globals.set("全局变量名",全局变量值)
// 2.2 使用环境变量做容器: 在特定环境下生效,
pm.environment.set("环境变量名", 环境变量值)
// 3.引用环境变量
// 3.1 URL、请求头headers、请求体body 引用方式:{{全局变量名}}/{{环境变量名}}
// 3.2 代码中引用方式:var value = pm.environment.get("var_name");
var value = pm.environment.get("var_name");
4. 创建环境
- 全局变量:在整个postman中都可以使用的变量。不需要单独创建环境。
- 环境变量:在特定的环境下,才能使用的变量。需要给此变量创建单独的环境。
3. 案例
1. 使用 postman 关联,实现下面案例
从获取天气接口,http://www.weather.com.cn/data/sk/101010100.html 获取返回结果中的城市名称
调用百度搜索接口: http://www.baidu.com/S?wd=北京 ,把获取到的城市名称,如:北京,作为请求参数
思路:
1. 发送 获取天气请求,获取响应结果
2. 从响应结果中,拿到城市名,存入 全局变量
3. 百度搜索接口从 全局变量中,取城市名,发送搜索请求。
Tests 代码:
// 1. 获取响应结果
var jsonData = pm.response.json()
// 2. 从响应结果中,提取 城市名
var city = jsonData.weatherinfo.city
// 3. 将城市名保存到 全局变量
pm.globals.set("glb_city", city)
2. 使用 postman关联技术,实现添加员工接口
登录成功,返回的 “令牌” 被添加员工接口依赖
思路:
1. 发送登录请求(必须登录成功),获取响应结果
2. 从 json 响应结果中,提取 data 值。拼接上 “Bearer ” 前缀。
注意:Bearer单词不能拼错,首字母必须大写,只有一个空格
3. 将拼接无误的 令牌,存入 环境变量。 从 “眼睛” 图标查看。
4. 添加员工 接口,从 环境变量 中,提取 令牌。设置到请求头中,作为 Authorization 的值。
5. 填写 添加员工 接口 其他信息(post、URL、请求体),发送请求。
登陆
登陆成功,保存token
3. Postman参数化
1. 简介
什么是参数化:
- 将测试数据,组织到数据文件中,通过脚本的反复迭代,使用不同的数据,达到测试不同用例的目标。
应用场景:
- 一般在测试同一个接口的不同测试点时,只有测试数据不同。考虑使用参数化。
2. 数据文件简介
CSV
优点:
- 数据组织格式简单
缺点:
- 不能测试 bool 类型。因为 postman 读取 csv后,将所有非数值类型数据,自动添加
""
变为字符串 - 不能存储复杂数据类型(元组、列表、字典)。
- 不能实现参数测试<多参、少参数、无参>。
- 不能测试 bool 类型。因为 postman 读取 csv后,将所有非数值类型数据,自动添加
应用场景:数据量较大,数据组织格式简单。
JSON:
优点:
- 可以测试 bool类型
- 能使用复杂数据类型
- 可以实现参数测试<多参、少参、无参>。
缺点:
- 相同数据量,json文件要远大于 csv 文件。
应用场景:数据量较少,数据组织格式复杂。需要进行参数测试!
3. 编写数据文件
1. CSV
新建文本文件,扩展名命名为csv,可以使用Excel表格打开进行编辑,编码格式选择utf-8
username | password | msg |
---|---|---|
13800000002 | 123456 | 登录成功!! |
13800000002 | 12345x | 密码错误!! |
13800000112 | 123456 | 账号不存在!! |
2. JSON文件
可以使用json在线校验:
[
{
"username":"13800000002",
"password":"123456",
"msg":"操作成功!"
},
{
"username":"13800000002",
"password":"12345x",
"msg":"密码错误!!"
},
{
"username":"13000000112",
"password":"123456",
"msg":"账号不存在!!"
}
]
4. 导入数据文件到Postman
5. 读取数据文件数据
理论: 根据使用位置不同,有两种方法
- 第一种:请求参数(请求行、请求头、请求体)中,使用 数据文件中 的数据
- csv文件:; json文件:
- 第二种:代码(Tests)中,使用数据文件中的数据
- 使用 postman 内置的 关键字 data,索引字段名或键名
- csv文件:data.字段名; json文件:data.键名
6. 案例
需求:批量查询 手机号 所属运营商,校验运营商数据正确性
接口: http://cx.shouji.360.cn/phonearea.php?number=13012345678
测试数据:
手机号: 13012345678 运营商: 联通
手机号: 13800001111 运营商: 移动
手机号: 18966778899 运营商: 电信
4. Postman测试报告
**为什么需要测试报告?**测试统计分析 + 测试结果确认
1. 安装node.js
- 安装
- nvm包管理器安装
- nvm可以安装多个不同版本的node,并且能自由切换node的版本。
- 手动安装:
- 双击 .msi 文件,一路下一步安装即可。无需特殊设定。
- nvm包管理器安装
- 测试安装成功
- node -v
- npm -v
2. 安装newman
# 安装newman
npm install -g newman
# 测试安装成功
newman -v (newman: required node version >=16)
# 安装newman插件 - 扩展版
npm install -g newman-reporter-htmlextra
3. 导出用例集
1. 扩展导入用例集
4. 导出环境文件
5. newman生成测试报告
# 完整命令
newman run 用例集文件.json -e 环境文件.json -d 数据文件.json/.csv -r htmlextra --reporter-htmlextra-export 测试报告名.html
-e 和 -d 是 非必须的。
如果没有使用环境,不需要指定 -e
如果没有使用数据文件(做参数化),不需要指定 -d
6. 案例
newman run DJY-OA.postman_collection.json -e DJY-OA测试环境.postman_environment.json -d 参数化-登录.json -r htmlextra --reporter-htmlextra-export 测试报告.html