龙空技术网

测试工具链—— Python实现JSON数据的一致性校验

软件测试开发技术栈 374

前言:

目前你们对“python校验文件完整性”大概比较看重,同学们都需要分析一些“python校验文件完整性”的相关知识。那么小编在网络上网罗了一些关于“python校验文件完整性””的相关知识,希望小伙伴们能喜欢,我们快快来学习一下吧!

在测试工作中,一般都会接触到期望结果数据与实际结果数据一致性比对的测试场景,对于复杂、庞大数据的比对工作。如果依靠人工执行,其成本相当高,难以保障执行结果的一致性(多次执行可能存在偏差),并且重复性极高。因此,通常我们需要考虑如何通过自动化工具实现数据的比对。

之前分享过基于结构化数据比对文章,主要应用于文件一致性比对的测试场景。今天分享下如何实现Json数据的一致性校验的整体设计与实现。

JSON的两种数据结构

1.Key-Value对集合,在Python语言中可以理解为字典(Dict),如下图。

2.有序集合,在Python语言中可以理解为列表(List),如下图。

一致性校验核心设计

在测试工作中接触的Json数据校验,大多是请求响应体的校验,设计主要考虑了以下两点:

1.需支持复杂JSON比对,如查询地市编码基本信息接口的响应体中包含,省份编码、省份地市的基本信息(地市编码、地市名称、地市排序),例如 :

2.需支持比对结果的可追溯,比如地市数量(Count)不一致时,不能仅输出期望、实际结果的地市数量,还需要输出整个JSON的哪个节点的值不一致,或者缺失哪个节点,如Detail.Count的值不一致,例如:

[ERROR] ACTUAL-JSON ==> [Detail.Count]的VALUE不同:  <actual>: 2  <expect>: 3
设计实现

一致性比对的整体设计包含三个模块:递归解析模块,格式转换模块,数据比对模块,具体描述如下。

递归解析模块

递归解析,按key的层次关系,每层生成数据结构为[[key1,key2,value1],[key1,key2,value2]],代码设计如下:

递归解析模块源码

结果输出截图

格式转换模块

创建节点流及值映射,数据结构为{key1.key2:value1,key1.key3:value2},如下

格式转换模块源码

结果输出截图

数据比对模块

针对格式转换模块的结果,遍历比对各节点流(如,Detail.City.sort),校验节点与值是否一致,对于不一致的数据输出节点流及值,输出节点流及值,如下。

数据比对模块源码

结果输出如下:

[ERROR] ACTUAL-JSON ==> [Detail.Count]的VALUE不同:  <actual>: 2  <expect>: 3

若对你有所帮助,欢迎大家评论、留言。

标签: #python校验文件完整性