接口测试Day03-postman断言&关联&参数化&控制台调试

发布于:2025-02-11 ⋅ 阅读:(95) ⋅ 点赞:(0)
  • postman常用断言

注意:不需要手敲,点击自动生成生成

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

pm: postman的实例
test() : postman实例的测试方法,这个方法有两个参数。
	参数1:"Status code is 200",这个参数可以任意修改,不影响断言
		作用:在断言结束后,显示给用户,断言结果的提示文字。
	参数2: function () {
    pm.response.to.have.status(200);
},是一个匿名函数调用

pm.response.to.have.status(200);的意思是:
postman的响应结果中,应该有响应状态码 200,------这里的200是 预期结果

在这里插入图片描述

  • 断言包函某字符串
    Response body: Contains string
//断言响应体包函指定字符串
pm.test("Body matches string", function () {
	pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

pm:postman的实例。
test() postman实例的测试方法。 这个方法 有 2 个参数。
	参1:"Body matches string"。 这个参数可以任意修改,不影响 断言。
		作用:在断言结束后,显示给用户,断言结果的提示文字。
	参2:是一个 匿名函数 调用。
	pm.expect(pm.response.text()).to.include("string_you_want_to_search"); 的意思是:
postman 期望 响应文本中,应该包含 “你想搜索的字符串”(预期结果)

在这里插入图片描述

  • 断言json响应数据
    Response body: JSON value Check
pm.test("Your test name", function () {
	var jsonData = pm.response.json();
	pm.expect(jsonData.value).to.eql(100);
});

pm:postman的实例。
test() postman实例的测试方法。 这个方法 有 2 个参数。
	参1:"Body matches string"。 这个参数可以任意修改,不影响 断言。
		作用:在断言结束后,显示给用户,断言结果的提示文字。
	参2:是一个 匿名函数 调用。
	var jsonData = pm.response.json(); 将 整个 json响应体 赋值到 变量 jsonData 上。
	pm.expect(jsonData.value).to.eql(100); postman 期望 json结果中 指定key 的值为 xxx
		value 能取值:success、code、message

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

  • 断言响应数据某个值不为空且0
pm.test("断言用户生日不为空且不为0", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.user_info.birthday).to.not.be.undefined;
    pm.expect(jsonData.user_info.birthday).to.not.be.null;
    pm.expect(jsonData.user_info.birthday).to.not.eql("");
    pm.expect(jsonData.user_info.birthday).to.not.eql("0");
});
  • 响应数据是字典套列表格式{k:v,k:[v1,v2,v3]}
    在这里插入图片描述
    在这里插入图片描述
  • 响应json数据格式是[{},{}……]

[{k:v},{k:[v1,v2,v3]}……]
在这里插入图片描述

var jsonData = pm.response.json();

// 遍历JSON数组中的每个对象
// forEach 是数组的一个内置方法,用于对数组的每个元素执行一次提供的函数
jsonData.forEach(function(item, index) {
    // 对每个对象的courseName属性进行断言
    pm.test("Course name should be 'dh-tur正则' for item at index " + index, function() {
        pm.expect(item.courseName).to.eql("dh-tur正则");
    });

    // 如果还需要对嵌套在courses数组中的courseName进行断言
    item.courses.forEach(function(course, courseIndex) {
        pm.test("Nested course name should be 'dh-tur正则' for course at index " + courseIndex + " in item at index " + index, function() {
            pm.expect(course.courseName).to.eql("dh-tur正则");
        });
    });
});

  • Postman 断言工作原理

在这里插入图片描述

  • postman 关联
  • 简介
    当接口和接口之间,有依赖关系时,需要借助 postman 关联技术,来实现。
    如: 登录接口 返回的 令牌数据,被 添加员工接口依赖。
    添加员工接口 返回 员工id,被 查询员工接口依赖。
  • 实现步骤
    假定:接口B 产生的数据,被 接口A 依赖。
  1. 发送 接口B 请求,获取响应数据。
  2. 将 响应数据,放入公共容器(全局变量、环境变量)中
  3. 接口A 从 公共容器中,提取数据,发送请求。
    在这里插入图片描述
  • 核心代码
//1、获取响应数据,转为 json格式,保存到变量中
var jsonData = pm.response.json()

//2.1、使用 全局变量做容器
pm.global.set("全局变量名",全局变量值)
//2.2、使用 环境变量做容器
pm.environment.set("环境变量名", 环境变量值)

//3、在postman 界面中(url、请求头headers、请求体body) 提取 全局/环境 变量数据
{{全局变量名}}/{{环境变量名}}
  • 创建环境
    全局变量:在 整个postman中都可以使用的变量。不需要 单独创建环境。
    环境变量:在 特定的环境下,才能使用的变量。需要给此变量创建单独的环境。

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

  • 案例一

1

  1. 使用 postman 关联,实现下面案例
    从获取天气接口,http://www.weather.com.cn/data/sk/101010100.html
    获取返回结果中的城市名称
    调用百度搜索接口: http://www.baidu.com/S?wd=北京 ,把获取到的城市名称,如:北京,作为请求参数
    思路:
  2. 发送 获取天气请求,获取响应结果
  3. 从响应结果中,拿到城市名,存入 全局变量
  4. 百度搜索接口从 全局变量中,取城市名,发送搜索请求。
    Tests 代码:
/ 1. 获取响应结果
var jsonData = pm.response.json()

// 2. 从响应结果中,提取 城市名
var city = jsonData.weatherinfo.city

// 3. 将城市名保存到 全局变量
pm.globals.set("glb_city", city)

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

  • 案例二
    使用 postman 关联技术,实现 添加员工 接口。
    登录成功,返回的 “令牌” 被 添加员工 接口依赖。
    思路:
  1. 发送登录请求(必须登录成功),获取响应结果
  2. 从 json 响应结果中,提取 data 值。拼接上 “Bearer ” 前缀。
    注意:Bearer单词不能拼错,首字母必须大写,只有一个空格
  3. 将拼接无误的 令牌,存入 环境变量。 从 “眼睛” 图标查看。
  4. 添加员工 接口,从 环境变量 中,提取 令牌。设置到请求头中,作为 Authorization 的 值。
  5. 填写 添加员工 接口 其他信息(post、URL、请求体),发送请求。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    - [ ] 员工查询
  • 参数化

  • 简介

什么是参数化:
将 测试数据,组织到 数据文件中,通过脚本的反复迭代,使用不同的数据,达到测试不同用例的目标。
应用场景:
一般在测试同一个接口不同 测试点时,只有测试数据不同。考虑使用 参数化。

  • 数据文件简介

CSV:
优点:数据组织格式简单
缺点:

  1. 不能测试 bool 类型。因为 postman 读取 csv后,将所有非数值类型数据,自动添加 ”“ 变为字符串
  2. 不能存储复杂数据类型(元组、列表、字典)。
  3. 不能实现 参数测试。

应用场景:数据量较大,数据组织格式简单。
在这里插入图片描述

JSON:
优点:

  1. 可以测试 bool类型
  2. 能使用 复杂数据类型
  3. 可以实现 参数测试。

缺点:相同数据量,json文件要远大于 csv 文件。
应用场景:数据量较少,数据组织格式复杂。需要进行 参数测试!
在这里插入图片描述

  • 编写数据文件
    在这里插入图片描述
    在这里插入图片描述
  • 读取数据文件

理论
根据 使用位置 不同,有两种方法。
第一种:请求参数(请求行、请求头、请求体)中,使用 数据文件中 的数据
csv文件:{{字段名}}; json文件:{{键名}}
第二种:代码(Tests)中,使用 数据文件中 的数据
使用 postman 内置的 关键字 data,索引 字段名 或 键名
csv文件:data.字段名; json文件:data.键名

  • 案例

需求:批量查询 手机号 所属运营商,校验运营商数据正确性
接口: http://cx.shouji.360.cn/phonearea.php?number=13012345678
测试数据:
手机号: 13012345678 运营商: 联通
手机号: 13800001111 运营商: 移动
手机号: 18966778899 运营商: 电信
在这里插入图片描述
在这里插入图片描述
应该从Runner中运行
在这里插入图片描述
运行结果
在这里插入图片描述

  • postman控制台调试

注意: runner前要保存请求数据,未保持不生效

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到