使用postman接口测试

时间:2024-10-29 18:34:11

一 、postman断言

1、什么是断言

postman 断言借助JavaScript -js 语言编写代码,自动判断预期结果与实际结果是否一致。
断言代码写在 Tests 的标签中。(新版本在Scripts标签中)

2、断言工作原理

断言工作原理

3、常用断言

断言响应状态码

// 断言响应状态码 是否为 200
pm.test("status code is 200",function(){
	pm.response.to.have.status(200)
};

pm:代表 postman 的一个实例
test():是pm实例的一个方法。
有两个参数
	参数1:在断言成功后,给出的文字提示。可以修改。"statuscode is 200"
	参数2:匿名函数。
pm.response.to.have.status(200);//意思:postman 的响应结果中应该包含状态码 200

在这里插入图片描述
注意:新版本的断言在Scripts标签—>post-response


断言响应体是否包含某个字符串

pm.test("是否包含百度", function () {
    pm.expect(pm.response.text()).to.include("baidu");
});
pm:代表 postman 的一个实例
test():是pm实例的一个方法。
有两个参数
	参数1:在断言成功后,给出的文字提示。可以修改。"statuscode is 200"
	参数2:匿名函数。pm.expect(pm.response.text()).to.include("baidu");

在这里插入图片描述


断言响应体是否等于某个字符串(对象)

pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});
//需要将响应结果整个填入"response_body_string"中才能断言成功

在这里插入图片描述


断言json响应结果

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});
var jsonData =pm.response.json;
// var jsonData 用 js语法定义一个变量。jsonData 就是变量名
//pm.response.json();代表响应的json结果
/*举例:response.json();
{
	"success": true,
	"code": 10000,
	"message":"操作成功!",
	"data":"95c78d75-721c-40fb-b2d5-742fea42cbd5"
}
*/
pm.expect(jsonData.value).to.eql(100);
// pm 预期 json结果 key对应的值 等于 xxx
// 举例:jsonData.value 的value:取:success、code、message、data

断言响应头

pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

pm.response.to.have.header("content-Type");
//pm 的响应 头中包含 Content-Type
// 示例:可以在 header 中,添加 响应头中的 key 对应的 value 判定。用 ,隔分。// 断言响应头
pm.test("content-Type is present",function(){
	pm.response.to.have.header("content-Type","application/json;charset=UTF-8");
});

二、全局变量、环境变量、请求前置脚本

全局变量
概念:在 Postman 全局生效的变量,全局唯一。
设置:

  • 代码设置:pm.globals.set(“全局变量名”,全局变量的值)
// An highlighted block
// 示例:
pm.globals.set("glb_age", 100)

获取:

  • 代码获取:var 接收值的变量= pm.globals.get(“全局变量名”)
// 示例:
var ret=pm.globals.get("glb_age")//ret 的值为 100
  • 请求参数获取:(postman界面获取):{{全局变量名}}
// 示例:
{{glb_age}}

环境变量
概念:在特定环境(生产环境、开发环境、测试环境)下,生效的变量,在本环境内唯一。
设置:

  • 代码设置:pm.environment.set(“环境变量名”,环境变量的值)

// 示例:
pm.environment.set("env_age", 99)

获取:

  • 代码获取:var 接收值的变量= pm.environment.get(“环境变量名”)
// 示例:
var ret=pm.globals.get("env_age")//ret 的值为 99
  • 请求参数获取:(postman界面获取):{{环境变量名}}
// 示例:
{{env_age}}

请求前置脚本
在 send 按钮点击后,请求前置脚本代码,第一时间被执行。在 postman 内部实际 http请求之前。

  • 假设,这样一种场景:
    调某接口时,要输入“时间戳”,如果输入的“时间戳”的绝对值,超过标准时间10分钟。 则不允许调用。

时间戳: 对应绝对时间,从1970年1月1日00:00:00 到现在 所经历的秒数


前置脚本工作原理
在这里插入图片描述


案例:调用百度首页接口,传时间戳给服务器
实现步骤:
1.在 Pre-request Script 标签页中,添加代码。拿到时间戳,写入全局变量

//拿到时间戳
var timestamp =new Date().getTime()
// 将时间戳设置到全局变量
pm.globals.set("glb_timestamp",timestamp)

2.点击 Send 按钮,发送请求。请求发送前执行 上述代码。写入全局变量
3.查看写入的变量
在这里插入图片描述
4.在 请求参数(界面)中,使用全局变量。{{全局变量名}}
在这里插入图片描述

三、postman关联

介绍:应用于 多个 http请求之间,有数据关联、或依赖关系时。
实现步骤
A接口 依赖 B接口 的数据
1.向B接口发送http请求,获取数据
2.将数据 设置 至 全局变量(环境变量)中
3. A接口 获取全局变量(环境变量)中 数据值,进行使用。

案例
请求 获取天气接口, 提取响应结果中的 城市,将城市名,给百度搜索接口使用。
实现步骤:
1.创建用例集,分别创建 查询天气 请求 和 百度搜索的请求
2.在查询天气请求 Tests 中,编写代码 获取 城市名,写入全局变量

//获取 全部响应结果
var jsonData=pm.response.json()
//从响应结果中 获取 城市名
var city=jsonData.weatherinfo.city
//将城市名写入到全局变量
pm.globals.set("glb_city", city)

3.点击 Send 按钮,发送请求,查看设置的全局变量。
在这里插入图片描述
4.修改 百度搜索请求,使用全局变量,按 城市名进行搜索,
在这里插入图片描述


批量执行用例集
在这里插入图片描述
在这里插入图片描述

四、postman生成测试报告

安装测试报告插件
安装步骤:
1.需要先安装node.js
2.安装newman

npm install -g newman
//验证安装成功:newman -v 出现版本号安装成功

3.安装newman-reporter-html

npm install -g newman-reporter-html

使用newman生成测试报告
步骤
1.批量执行测试用例集。(确认无误)
2.导出Export 用例集。(得到 xxxx.json文件)
3.在 终端 中 执行命令,生成测试报告

# 完整的命令
newman run xxxx.json -e 环境变量文件-d 外部数据文件 -r html --reporter-htm]-export 测试报告名.html
# 现在 终端中,测试一下
newman run xxxx.json
#如果添加 -r html就报错,说明newman-reporter-html安装失败

生成第一个测试报告
1.postman导出Export 用例集。(得到 xxxx.json文件)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.命令行批量执行测试用例集,如果没出错可以生成报告

//批量执行测试用例集
newman run postman常用断言.postman_collection.json

在这里插入图片描述

//生成测试报告
newman run postman常用断言.postman_collection.json -r html --reporter-html -export 我的第一个测试报告.html

在这里插入图片描述
在这里插入图片描述

五、postman读取外部数据文件(参数化)

当 http请求,使用的 数据有较高相似度时,相同的请求时,考虑使用参数化(将数据组织到数据文件中)。
数据文件简介
CSV文件
优点:数据组织形式简单,适用于大量数据的场合。
缺点:

  1. 不支持 bool类型数据。(数据被 postman读入后,自动添加 “” (如"true")包裏bool值。
  2. 不支持 多参、少参、无参、错误参数 的接口测试。
  3. 不支持复杂数据类型。(如 嵌套字典、列表等)

JSON文件
优点

  1. 支持 bool 类型。
  2. 支持 多参、少参、无参、错误参数。
  3. 支持复杂数据类型。

缺点:对于相同数据量,JSON数据文件大小远大于 CSV文件。


导入外部数据文件
CSV文件

  1. 创建 xxx.csv 文件。
  2. 将数据写入到 csv文件中。
    • 第一行 写入 的是 数据对应的“字段名” 。
    • 从第二行向后依次是对应的数值,数据间用英文逗号隔分
  3. 在 Postman 中,选中使用数据文件的 用例集,导入数据文件。
    1. 点击用例集名称,使用 Run 按钮,进入“Runner"页面。
    2. 使用“Select File"按钮选择 xxx.csv 文件
    3. 点击preview 预览按钮,校验数据文件是否正确。

案例:
1.创建“测试csv参数化.csv”文件
在这里插入图片描述
2.点击postman的collection–>Run
在这里插入图片描述3.点击select file选中测试csv参数化.csv文件
在这里插入图片描述
4.点击preview看是否导入csv文件成功
在这里插入图片描述

JSON文件

  1. 创建 xxx.json 数据文件
  2. 在 数据文件中,按json 语法写入json数据。postman要求,json格式的数据文件,数据内容的最外层必须是[1。内部所有的数据用 存储。
  3. 在 Postman 中,选中使用数据文件的 用例集,导入数据文件。
    1. 点击用例集名称,使用 Run 按钮,进入“Runner"页面。
    2. 使用“Select File"按钮选择 xxx.json 文件
    3. 点击 preview预览按钮,校验数据文件是否正确。

和csv文件一样,这里不做演示。


读取数据文件数据
根据使用数据 位置 不同,有两种获取数据文件中数据的方法。

第一种:请求参数(请求行、请求头、请求体)中,使用数据文件中 的数据。 使用 {{}} 包裹 csv 文件 字段名 或 json 文件中的 key"
如:{{username}}或{{password}}

第二种:代码(断言、请求前置脚本)中,使用 数据文件中 的数据。 需要借助 postman 提供的 关键字 data 点 csv 文件的字段名 或 json文件的 key
如:data.username 或data.password

案例

需求:批量查询手机号归属地、所属运营商,校验运营商数据正确性
接口:http://cx.shouji.360.cn/phonearea.php?number=13012345678
测试数据:
手机号:13012345678运营商: 联通
手机号: 13800001111运营商: 移动
手机号:18966778899运营商: 电信

实现步骤:

  1. 创建csv文件
    在这里插入图片描述
  2. 断言设置,在代码中读取数据
    在这里插入图片描述
  3. 在参数中读取数据

在这里插入图片描述
4. 导入数据文件,并且运行
在这里插入图片描述
在这里插入图片描述
5. 运行结果
在这里插入图片描述
注意点:使用数据文件驱动接口测试时,不能直接在接口处点击运行按钮,必须进入Runner页面运行接口测试
在这里插入图片描述


  1. 生成测试报告
    步骤:
    1.批量执行测试用例(借助数据文件)
    2.导出 测试用例集 建议与 数据文件 放在一起)
    3.执行生成测试报告的命令

newman run 用例集名称.json -d 数据文件名.csv/.json -r html --reporter-html-export 报告名称.html

在这里插入图片描述
在这里插入图片描述