接口关联
当请求之间有依赖关系, 比如一个请求的入参是另一个请求返回的数据, 这时候需要用到关联处理.
接口关联的思路
要获取某个请求的响应结果, 可以通过在Tests标签页中编写JavaScript脚本来实现
// 获取json格式的响应数据
var jsonData = pm.response.json();
多个请求之间可以使用全局变量或环境变量来传递数据
把数据保存到全局变量中
pm.globals.set("token", token)
获取某个全局变量的值:
// 非代码形式获取:
{{variable}}
// 代码形式获取:
pm.globals.get("variablename")
接口关联案例
(1).请求获取天气的接口,http://www.weather.com.cn/data/sk/101010100.html
(2).获取返回结果中的城市名称
(3).调用百度搜索接口: http://www.baidu.com/s?wd=北京 ,把获取到的城市名称作为请求参数
// 实现思路
(1).postman访问天气接口, 在Tests中编写脚本:
- 先获取接口的响应数据, 转化为json数据格式
- 从json数据中取出city的值
- 将city的值设置为全局变量
(2).访问百度查询接口, 将关键词设置为上一个请求添加的环境变量的值
// 脚本
var jsonData = pm.response.json();
var city = jsonData.weatherinfo.city;
console.log("city为: + city);
pm.globals.set("city", city);
// 百度查询URL
http://www.baidu.com/s?wd={{city}}
批量执行测试用例
要想批量执行测试用例,需要先把接口请求添加到测试集中,通过运行测试集的方式就可以实现批量运行测试用例。
// 实现:
(1).创建测试集
(2).在测试几种添加接口请求
(3).运行测试集(实现测试集中多接口用例批量执行)
参数化应用场景
// 应用场景:
针对于某个接口,如果有大量的测试数据需要批量验证,可以把测试数据保存到数据文件中,通过参数化的方式来实现。
案例实现
// 需求: 批量查询手机号归属地和所属运营商信息,并校验运营商数据是否正确
// 接口: http://cx.shouji.360.cn/phonearea.php?number=13012345678
# 实现步骤分析:
- 定义数据文件: CSV文件 or JSON文件
- 定义接口请求, 注意此时接口中的number的值不可写死, 应使用变量
- 在Tests中定义断言脚本
- 发送请求时选择数据文件
- 执行请求
环境搭建
Newman是一款基于nodejs开发的可以运行Postman脚本的工具,并可以生成测试报告. 其环境搭建如下:
# 1.nodejs环境准备
(1).下载nodejs: http://nodejs.cn/download/
(2).安装nodejs, 并配置环境变量
# 2.安装Newman
(1).命令行安装newman及检验:
- 安装: npm install -g newman
- 检验: newman -v
注意: 如果报错执行: npm config set strict-ssl false
(2).命令行安装new-reporter-html: npm install -g newman-reporter-html
报告生成实现
# 生成报告实现步骤
(1).导出测试集
(2).执行测试, 打开命令行窗口:
newman run 测试脚本文件 -e 环境变量文件 -d 测试数据文件 -r html --reporter-html-export 测试报告存储路径
# 参数说明:
run xxx.json:表示要执行的postman脚本,即导出的测试集数据
-e source:用来指定环境变量文件的路径
-d source:用来指定测试数据文件的路径
-r html:用来指定生成的数据结果的类型,如json、html等
--reporter-html-export source:指定html报告生成的路径;如果不设置该参数,则会在当前目录下生成一个名字为newman的文件夹
实现案例
# 需求:
1.创建测试集h2007b
2.在测试集中创建两个请求
(1).一个请求天气接口
(2).另一个请求使用百度搜索接口搜索上一个天气查询接口的城市名称
# 实现思路
1.创建测试集:h2007b
2.创建天气查询接口
- 请求方式: GET
- 请求地址: http://www.weather.com.cn/data/sk/101010100.html
- 请求后置脚本, 从将响应数据转换为JSON数据, 再取出城市信息设置为全局变量: "city" --> city:
var jsonData = pm.response.json();
var city = jsonData.weatherinfo.city;
pm.globals.set("city", city);
3.创建百度查询接口:
- 请求方式: GET
- 请求地址: http://www.baidu.com/s?wd=城市名称, 城市名称使用全局变量的city
4.导出测试集
5.运行命令生成报告
newman run h2007b.postman_collection.json -r html --reporter-html-export reporter.html