PostMan 测试

 创建一个集合管理测试接口

token获取

Tests:后置脚本    Api 请求后的操作,一般写断言脚本的地方

Pre-request Script  :后置脚本     请求前的操作

以下代码放进Tests 后置脚本当中。

var respObj = JSON.parse(responseBody);
// 获取到TOKEN,保存到环境变量中
postman.setEnvironmentVariable("token", respObj.token);

响应数据断言测试

  

设置全局函数

创建一个全局函数myGlobalFunction 变量  ,把下面代码放到变量中

递归断言函数

var deepCompare = (actual, expected, path = '') => {  for (let key in expected) {  let fullPath = path ? `${path}.${key}` : key;  if (!actual.hasOwnProperty(key)) {  tests[`${fullPath}:actualData中不存在此字段`] = false ;}if (actual.hasOwnProperty(key)) {  if (typeof expected[key] === 'object' && expected[key] !== null) {  if (typeof actual[key] === 'object' && actual[key] !== null) {  deepCompare(actual[key], expected[key], fullPath);  } else {  pm.test(`Field ${fullPath} has the expected type`, function () {  pm.expect(actual[key]).to.be.an('object');  });  }  } else {  if (actual[key] !== expected[key]) {tests[`${fullPath}:actual:${actual[key]} , expected:${expected[key]}`] =actual[key]===expected[key];}}  }  }  
}  

 请求头Token添加

 在测试api请求头中的Authorization   添加{{token}}环境变量

 好处是,调用token获取api后,不用手动粘贴过来

断言脚本编写

  以下代码添加到tests后置脚本中

  准备以下三步

   // 准备预想数据

   // 获取实际数据

   // 调用编写好的全局函数测试断言(复杂的另写脚本)

// 预期的 Response 数据
const expectedData = {"msg": "操作成功","code": 200,"data": {"createBy": "admin","createTime": "2024-05-06 13:27:03","updateBy": null,"updateTime": null,"remark": "","postId": 11,"postCode": "ceo1","postName": "董事长1","postSort": 1,"status": "0","flag": false,"test": false}
};// 实际的 JSON 数据
const actualData = pm.response.json();// response断言对比
// 调用全局函数并传递参数
eval(pm.globals.get('myGlobalFunction'))
deepCompare(actualData, expectedData);

测试

可以清晰看到哪个字段错误,预想和实际值的比对结果。

这里只出力错误的。

数据库断言

因为Postman本身并没有提供数据库的查询功能,这时就可以利用Xmysql来实现

Postman的辅助工具Xmysql的主要作用是将数据库的表数据转换成Restful API接口,返回JSON格式的结果数据。在接口测试过程中,有时需要通过查询数据库数据来判断接口执行的结果是否正确,以校验数据的准确性。

  xmysql的安装及使用

用 Postman 做接口自动化(十四)xmysql 辅助操作 mysql 数据库(一)_postman自动化打开数据库-CSDN博客  

断言脚本编写

现在你要测试一个更新db的api更新完db,你要检查我的数据是否已经更新成功了

跟api一样的三步骤:

1 提前把数据库字段数据作成json数据用作预想数据。

2 利用xmysql  从数据库中检索到你更新的那条数据,用作实际数据

3 对比

// 预期的 Response 数据
const expectedData = [{"user_id": 1,"dept_id": 103,"user_name": "admin","nick_name": "若依","user_type": "00","email": "ry@163.com","phonenumber": "15888888888","sex": "1","avatar": "","password": "$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2","status": "0","del_flag": "0","login_ip": "127.0.0.1","login_date": "2024-05-15T05:06:54.000Z","create_by": "admin","create_time": "2024-05-06T05:27:02.000Z","update_by": "12","update_time": "2024-05-15T05:06:53.000Z","remark": "管理员1"}];
// 实际的 JSON 数据
const actualData = pm.response.json();// 断言对比
// 调用全局函数并传递参数
eval(pm.globals.get('myGlobalFunction'))
deepCompare(actualData, expectedData);

 response Body:跟预想值对比下就好,没啥用处

 

测试

问题:

   按理来说只有remark字段不对 

   updateTime   这种时间没办法用作断言比对

   在预想的时候去掉。。。// 待定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706138.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义类似vite的命令行

一、第一步 随便新建一个文件夹,终端执行npm init,生成如图的结构 其中name就是命令行的名字 二、第二步 新建一个js文件,在其顶部加入这串代码#!/usr/bin/env node,#!就是告诉系统这个是可执行脚本,/usr/bin/env就是系统环境变量&#x…

总结5.15

今日做了一场华为机试,三道题,一道通过率95%,一道45%。在过去的一段时间里,我彻底迷失了自我,没有自我的一个规划,也不知道怎么走出来。 后来,我想借助网络的力量,去知乎上寻找能点…

其实解决问题的方法很简单

大家好!我是编码小哥,欢迎关注,持续分享更多实用的编程经验和开发技巧,共同进步! 本例是一个动态数组的例子,实现数据的增加、删除、根据索引修改数值、获取数值。 dynamic_array.c #include "dy…

安防监控视频平台EasyNVR级联视频上云系统EasyNVS出现“Login error”报错的原因排查

EasyNVR安防视频云平台是旭帆科技TSINGSEE青犀旗下支持RTSP/Onvif协议接入的安防监控流媒体视频云平台。平台具备视频实时监控直播、云端录像、云存储、录像检索与回看、告警等视频能力,能对接入的视频流进行处理与多端分发,包括RTSP、RTMP、HTTP-FLV、W…

WebRTC实时音视频通话之语音通话设计与实践

一、背景 在移动互联网流量时代,很多业务场景都有音视频通信的需求,比如IM场景,除了文字交流还需要音视频通话进行实时交互。为了帮助58、赶集、安居客等业务线更好的为用户提供服务,节约沟通成本,提升效率&#xff0…

Qt编译和使用freetype矢量字库方法

在之前讲过QT中利用freetype提取字库生成图片的方法: #QT利用freetype提取字库图片_qt freetype-CSDN博客文章浏览阅读1.2k次。这是某个项目中要用到的片段,结合上一篇文章#QT从字体名获取字库文件路径使用// 保存位图int SaveBitmapToFile(HBITMAP hBi…

CSS引入方式

CSS引入方式 1 行内式2 内嵌式3 连接式/外部样式表 1 行内式 行内式,通过元素开始标签的style属性引入 样式语法为&#xff1a; 样式名:样式值; 样式名:样式值; 代码 <input type"button" value"按钮"style"display: block;width: 60px; height: 4…

45°和68°焕新上市,五粮液完成产品体系化布局

执笔 | 尼 奥 编辑 | 扬 灵 如今&#xff0c;白酒行业正经历周期性调整&#xff0c;头部化和品牌化集中趋势日益显著。五粮液在这一关键时刻&#xff0c;敏锐地捕捉到市场机遇&#xff0c;通过产品焕新&#xff0c;进一步完善和丰富了其代际系列产品体系。 这一举措不仅巩…

24年湖南三支一扶报名流程图及报名照片要求

24湖南三支一扶报名流程图&#xff0c;照片要求☑️ ✔️报名时间&#xff1a;5月15日9:00至5月23日17:00 ✔️报名方式 报考人员登录市州人力资源社会保障局官网、市州人事考试网等查看各地公告&#xff0c;按要求报名。 ✔️报名流程&#xff08;湖南各地市单独报名&…

MATLAB基础—变量及其操作

众所周知&#xff0c;计算机所处理的数据都是存放在内存单元中的&#xff0c;而每个内存单元都有一个唯一的地址&#xff0c;程序就是通过这个内存单元的地址来访问内存单元的。 在高级语言中&#xff0c;只需要给每个内存单元取一个名字&#xff0c;然后通过这个名字就能够访问…

kubernetes二进制多master部署

文章目录 一、master02 节点部署&#xff08;在上期博客部署完成的情况下&#xff09;1、准备master02节点需要的文件2、修改配置文件kube-apiserver中的IP3、启动各服务并设置开机自启4、查看node节点状态 二、负载均衡部署1、配置load balancer集群双机热备负载均衡1.1 准备n…

【Shell】shell编程之数组

目录 一、数组的概念 二、数组定义方法 三、数组 1.获取数组长度 2.获取数组数据列表 3.获取数组下标列表 4.读取某下标赋值 5.数组遍历 6.数组切片 7.数组替换 8.数组删除 四、数组追加元素 五、向函数传数组参数 ​编辑六、数组排序算法 1.冒泡排序 2.直接选…