当前位置: 首页 > news >正文

打造高效接口自动化测试:精准对比与可视化展示,轻松发现数据差异!

      前言

        在进行接口自动化测试时,一个不可或缺的步骤是验证接口返回的数据是否符合我们的预期。要准确完成这一任务,一种高效的方法是编写专门的函数或方法,其核心职责在于仔细比较接口实际的响应数据与预先定义的期望结果之间的一致性。这不仅涉及到数据的内容,还包括数据结构和状态码等方面的校验。

        此外,仅仅完成比对任务本身并不够,为了提升测试结果的可理解性和后续分析的便捷性,将这些比对结果转化为一份结构化并且可视化的表格是非常必要的。这种表格能够直观地展示出哪些接口符合预期,哪些不符合,包括具体的差异点,如缺失的字段、不匹配的值等信息,从而为开发人员定位问题、理解接口行为提供直接而有效的帮助。

        实现这一过程,不仅需要对接口测试的标准流程有清晰的认识,还需要具备一定的编程能力,以便设计和实现功能齐全、逻辑清晰的测试脚本。使用如Python等编程语言中的单元测试框架,或者是专门的接口自动化测试工具如Postman、JMeter等,都能够有效地支撑这一需求。

Python实现接口实际结果与预期结果对比

代码实现

下面使用Python实现这一功能,代码如下:

def compare_results(actual, expected, *exclude_keys):"""比较接口返回的实际结果与预期结果,支持多层嵌套结构,排除不需要校验的参数。:param actual: 接口返回的实际数据(通常是一个字典或列表):param expected: 预期数据(通常是一个字典或列表):param exclude_keys: 需要排除校验的参数键名,可以使用"parent.child"的形式排除多层嵌套的字段:return: 一个字典,表示不匹配的字段和对应的实际与预期值"""mismatches = {}def _compare(act, exp, parent_key=""):# 如果是字典,递归遍历其内部if isinstance(act, dict) and isinstance(exp, dict):for key in act:# 构建完整的键名full_key = f"{parent_key}.{key}" if parent_key else key# 如果该键在排除校验的列表中,则跳过if full_key in exclude_keys:continue# 如果预期结果中没有这个键,或者嵌套对比子项if key in exp:_compare(act[key], exp[key], full_key)else:mismatches[full_key] = {"actual": act[key], "expected": "Key not present in expected"}# 如果预期结果有的key在实际结果中不存在for key in exp:full_key = f"{parent_key}.{key}" if parent_key else keyif key not in act and full_key not in exclude_keys:mismatches[full_key] = {"actual": "Key not present in actual", "expected": exp[key]}# 如果是列表,递归遍历其每一个元素elif isinstance(act, list) and isinstance(exp, list):for i in range(min(len(act), len(exp))):full_key = f"{parent_key}[{i}]"_compare(act[i], exp[i], full_key)# 列表长度不相等的情况if len(act) != len(exp):for i in range(len(exp), len(act)):mismatches[f"{parent_key}[{i}]"] = {"actual": act[i], "expected": "No corresponding item"}for i in range(len(act), len(exp)):mismatches[f"{parent_key}[{i}]"] = {"actual": "No corresponding item", "expected": exp[i]}# 对于基础数据类型,直接比较else:if act != exp:mismatches[parent_key] = {"actual": act, "expected": exp}# 调用内部函数开始比较_compare(actual, expected)return mismatches# 示例使用
actual_response = {"id": 123,"name": "John","email": "john@example.com","address": {"street": "123 Street","city": "New York","zip_code": "10001"},"orders": [{"id": 1, "total": 100.0},{"id": 2, "total": 200.0}]
}expected_response = {"id": 123,"name": "John Doe","email": "john@example.com","address": {"street": &#

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Leetcode 2399 】 检查相同字母间的距离 —— 哈希表
  • 2024国赛数学建模备赛|30种常用的算法模型之最优算法,线性规划
  • 服务器文件权限限制写入
  • 【Google SEO】SEO 面试问题和答案
  • uniapp去除顶部标题栏
  • 怎么摆脱非自然链接?
  • 虚拟化pve查看存储空间使用情况
  • ML17_变分推断01:KL散度、ELBO
  • pvesm list 命令使用
  • 单向链表的操作
  • 并发高负载场景下的负载均衡优化方案
  • 心觉:如何填平想象和愿望之间的鸿沟?
  • HTTP 请求方法(method)介绍
  • 深度学习(DL)算法分分类
  • nacos适配人大金仓以及达梦-2.41
  • [case10]使用RSQL实现端到端的动态查询
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • C# 免费离线人脸识别 2.0 Demo
  • create-react-app做的留言板
  • CSS中外联样式表代表的含义
  • flutter的key在widget list的作用以及必要性
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • JAVA SE 6 GC调优笔记
  • java 多线程基础, 我觉得还是有必要看看的
  • jquery cookie
  • js面向对象
  • js如何打印object对象
  • leetcode讲解--894. All Possible Full Binary Trees
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Meteor的表单提交:Form
  • supervisor 永不挂掉的进程 安装以及使用
  • Transformer-XL: Unleashing the Potential of Attention Models
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 我的面试准备过程--容器(更新中)
  • 以太坊客户端Geth命令参数详解
  • 用jquery写贪吃蛇
  • Linux权限管理(week1_day5)--技术流ken
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • #565. 查找之大编号
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (30)数组元素和与数字和的绝对差
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (PADS学习)第二章:原理图绘制 第一部分
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Core 中的路径问题
  • .net 后台导出excel ,word
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)