如何用DeepDiff测接口数据源变更?

news2024/11/25 20:20:04

开发同学最近变更了部分业务查询接口底层的数据源,希望测试同学能够针对这些接口进行一些回归验证,校验底层数据源更新前后业务查询接口返回的一致性,保证更新后对正常业务没有影响。

这个回归测试和一般接口测试有所区别,不仅仅需要回归接口本身业务的正确性,更需要对比并输出优化前后的接口返回值差异,最后给到开发做为修复缺陷的参考依据。

如何用DeepDiff测接口数据源变更?

那么我是怎么测的呢?

在与开发对齐测试需求后,我理出了这样一套测试流程:

1、在切换数据源前,根据测试范围尽可能地造业务数据,然后记录下调用接口的参数以及返回值。

2、通知开发切换数据源(可能是个开关配置),切换后,使用切换数据源前已经记录下来的参数再次请求查询接口并记录下返回值。

3、编写 Diff 脚本去输出每个相同的请求参数在切换数据源前后的接口请求返回值差异。

4、最后分析差异,将差异点进行记录并和开发对齐结果。

5、开发进行修复后进行脚本自动回归。

6、循环步骤三到五,直到没有差异或者差异可被接受为止,则测试结束。

如何编写 Diff 脚本?

整个测试流程中比较有技术的点可能是 Diff 脚本编写,我使用的是 Python 里的 DeepDiff 库,他可以很好的对比两个数据之间的差异,比如:

from deepdiff import DeepDiff

ddiff = DeepDiff(dict(a=1, b=2), dict(a=2, b=2))
print(ddiff)

输出是:

{'values_changed': {"root['a']": {'new_value': 2, 'old_value': 1}}}
Process finished with exit code 0

可以看到输出的是两个 dict 中 key 为 a 的值存在差异的部分,旧的 a 值是 1,而新的 a 值是 2。

将 DeepDiff 带入到整个测试流程中,最终呈现出来的测试结果是这样的:

如何用DeepDiff测接口数据源变更?

自己分析一下 diff_result 结果后就可以愉快地和开发去扯皮了。

最后

从接到需求到完成第一次测试结果输出,我花了大概一天半的时间。整个过程比较顺利,但在真正实践过程中,也遇到了一些需要思考的点。

比如:

1、造业务数据时,很难遍历到所有查询条件集合,那么这时候,至少需要保证主业务完全覆盖。

2、如何高效输出差异对比结果,比如只有存在差异时才输出请求参数、响应和差异点,让结果更好地被分析。

3、分析结果时需要首先将问题归类总结,同样类型的问题可能是一个原因导致的,将问题归类分析后能够更好地缩短和开发扯皮的时间。

最后,希望我这段测试经历能够启发到测试小伙伴,用技术去解决测试问题。

实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

如果对你有帮助的话,点个赞收个藏,给作者一个鼓励。也方便你下次能够快速查找。

如有不懂还要咨询下方小卡片,博主也希望和志同道合的测试人员一起学习进步

在适当的年龄,选择适当的岗位,尽量去发挥好自己的优势。

我的自动化测试开发之路,一路走来都离不每个阶段的计划,因为自己喜欢规划和总结,

自动化测试视频教程、学习笔记领取传送门!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

混合背包(01+完全+多重背包大杂烩)

因为我们知道求解多重背包时&#xff0c;是将其进行二进制优化为01背包问题&#xff0c;那么我们就将01背包和多重背包看成一种情况&#xff0c;然后只要处理&#xff0c;完全背包和01背包问题即可&#xff08;详细看下方代码&#xff09; #include<bits/stdc.h> using n…

leetcode 965.单值二叉树

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;单值二叉树 思路&#xff1a; 让当前的根节点与左孩子节点与右孩子节点判断&#xff0c;若相等则继续向下分治&#xff0c;让左孩子与右孩子当作新的根节点继续判断&#xff0c;直到某个节点不相等。 1️⃣ 代码&#x…

JUC常用4大并发工具类详解

什么是 JUC JUC 就是 java.util.concurrent 包,这个包俗称 JUC,里面都是解决并发问题的一些东西,该包的位置位于 java 下面的 rt.jar 包下面。 JUC 中 4 大常用并发工具类 CountDownLatch CyclicBarrier Semaphore ExChanger CountDownLatch CountDownLatch,俗称闭锁,作用…

关于 PostgreSQL 删除数据库 - 命令行删除,报错数据库不存在,pgadmin 报错存在会话链接 导致无法删除数据库问题

序言 测试环境&#xff1a; Windows 10问题 笔者尝试过在 cmd 命令行&#xff0c;使用PostgreSQL 的 psql 工具登录 postgresql&#xff0c;删除某个有问题的数据库&#xff0c;准备新建重载该数据库时&#xff0c;发现 DROP DATABASE database_name &#xff0c;竟然报错该…

esp32-cam红外实时监控报警系统(巴发云和邮箱同时推送)

esp32-cam红外实时监控报警系统 设想-巴发云转折-照片数量限制代码避开巴发云照片限制邮箱的坑同时我的巴发云微信也受到了提醒报警&#xff0c;虽然没有图片显示。 设想-巴发云 我想做一个人体红外传感器发现人体报警&#xff0c;同时给我手机发报警提醒&#xff0c;同时发送…

《数据结构》数据结构概念,顺序表,链表

目录 1. 为什么学习数据结构&#xff1f; 2. 数据结构 2.1. 数据 2.2. 逻辑结构 2.3. 存储结构 2.4. 操作 3. 算法 3.1. 算法与程序 3.2. 算法与数据结构 3.3. 算法的特性 3.4. 如何评价一个算法的好坏 4. 线性表 4.1. 顺序表 4.2. 单向链表 4.3. 单向循环链表&…

使用NVIDIA FX Composer验证多纹理合成效果

最近项目上有一个需求&#xff0c;需要将4张带透明通道纹理合成为一张&#xff0c;并且每张纹理指定一个全局透明度。由于纹理过多&#xff0c;合成效果无法保证&#xff0c;为了减少项目的风险&#xff0c;领导希望我先快速验证一下我们讨论的方法是否能完成项目的要求。因此我…

GO语言泛型

set一般没什么不方便的 但是使用GET 需要使用类型断言,将取出来的数据转为预期数据, 空接口本身是一个装箱,会产生内存逃逸和多一部分空间. 于是1.17GO使用泛型. 泛型实现: 分析可执行文件后:发现 也就是泛型会为每个数据类型都生产一套代码,导致可执行文件大小增加,并且使用…

在企业使用jmeter开展实际的接口自动化测试工具

在企业使用jmeter开展实际的接口自动化测试工具&#xff0c;建议按如下操作流程&#xff0c; 可以使整个接口测试过程更规范&#xff0c;更有效。 接口自动化的流程&#xff1a; 1、获取到接口文档&#xff1a;swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…

关于AES 和 BASE64 的理解

BASE64 首先 base64 是一种编码方式&#xff0c;它的字符集由64个不同字符组成&#xff08;A-Z、a-z、0-9和两个额外字符/&#xff09;&#xff0c;因此每个Base64字符都占用6个比特&#xff08;2^6 64&#xff09; Base64编码后的数据长度 4 * ceil(原始数据长度 / 3) 其中…

echarts 横向柱状图 刻度标签

echarts 横向柱状图 刻度标签 怎么调试都不左对齐 将width去掉固定宽度 echarts会自适应

如何录音转文字:探寻声音的文字之舞

随着科技的飞速进步&#xff0c;人们对于信息的传递和记录变得越发便捷。在这个数字化时代&#xff0c;录音转文字技术无疑是一颗璀璨的明珠&#xff0c;它让声音和文字在交织中跳跃&#xff0c;为我们带来了新的感知和体验。在这篇文章中&#xff0c;我们将深入探讨录音转文字…

DCDC芯片选型

一、BUCK芯片选型 最初MP2307特别好用&#xff0c;是由美国MPS公司推出

信息摘要 秘钥签名 数字签名 数字证书 数字验证 这都是什么东西?

信息摘要 秘钥签名 数字签名 数字证书 数字验证 这都是什么东西&#xff1f; 一下遇见这么多相近的名词&#xff0c;实在是难以区分理解&#xff0c;还是从这些概念产生的缘由理解吧 先看需求&#xff1a;如何保证 数据 在网络中传输时正确的&#xff1f;有没有被篡改&#x…

【算法 -- LeetCode】(022) 括号生成

1、题目 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2&#xff1a; 输入…

软件测试测试用例

等价类&#xff1a;把输入的数据可以分为有效的数据和无效的数据 被测试的对象输入的数据&#xff1a; 1、有效的数据 2、无效的数据 测试一个产品&#xff0c;需要考虑它的正确场景&#xff0c;也需要考虑它的异常场景 边界值:边界值测试用例是针对等价类测试用例方法的补…

7月第2周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩)发布!

飞瓜轻数发布2023年7月10日-7月16日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B…

【基于 GitLab 的 CI/CD 实践】04、GitLab Pipeline 实践(中)

目录 cache 缓存 cache:paths cache:key 缓存标记 cache:key:files 文件变化自动创建缓存 cache:key:prefix 组合生产 SHA 校验和 cache:policy 缓存策略 综合实例(一) 全局缓存 Pipeline 日志分析 Runner 缓存 综合实例&#xff08;二&#xff09; artifacts 制品…

NOTA P2 RM26,拮抗剂,与NOTA螯合剂偶联,结构式及相关应用介绍

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 英文名称&#xff1a;NOTA-P2-RM26 规格标准&#xff1a;1g、5g、10g CAS&#xff1a;N/A 分子式&#xff1a;C73H110N18O19 分子量&#xff1a;1543.8NOTA-P2-RM26结构式&#xff1a; 反应机理&#xff1a; NOTA-P2-RM26&…

八股总结(七)MySQL与Redis

文章目录 MySQL基础概念数据库三大范式是什么&#xff1f; 索引 Redis基本概念1、为什么用Redis作为MySQL的缓存&#xff1f; 数据结构2、Redis包含哪些数据类型&#xff1f;使用场景是什么&#xff1f;3、五种场景的Redis数据类型底层都是怎么实现的&#xff1f; Redis线程网络…