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

【软件测试】8_接口测试 _全量字段校验

文章目录

  • 一、简介和安装
  • 二、JSON Schema
    • 2.1 JSON Schema入门案例
    • 2.2 JSON Schema校验方式-2种
      • 2.2.1 在线工具校验
      • 2.2.2 python代码校验
      • 2.2.3 python代码校验的错误终端提示
  • 三、JSON Schema语法
    • 3.1 type关键字
      • 3.1.1 type语法
      • 3.1.2 type示例
    • 3.2 properties关键字
      • 3.2.1 properties语法
      • 3.2.2 properties示例1
      • 3.2.3 properties示例2
    • 3.3 required关键字
      • 3.3.1 required语法
      • 3.3.2 required示例
    • 3.4 const关键字
      • 3.4.1 const语法
      • 3.4.1 const示例
    • 3.5 pattern关键字
      • 3.5.1 pattern语法
      • 3.5.2 pattern示例
  • 四、JSON Schema综合案例

一、简介和安装

  • **概念:**校验接⼝返回响应结果的全部字段(更进一步的断言,断言只能校验字段的值。)

  • 校验内容:

    • 字段值
    • 字段名 或 字段类型
  • 校验流程:

    1. 定义 校验规则(json语法)

    2. 比对 响应数据(实际结果) 是否 符合 校验规则

  • 安装jsonschema:

    pip install jsonschema -i https://pypi.douban.com/simple/

二、JSON Schema

Json Schema: 用来定义json数据约束的一个标准

2.1 JSON Schema入门案例

// JSON Schema,把汉字写的“校验规则描述"转为JSON Schema语法,如下:{"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"}},"required":["success","code","message"]}====================================================================// json数据:待校验数据{"success":true,"code":100,"message":"操作成功"}

2.2 JSON Schema校验方式-2种

2.2.1 在线工具校验

http://json-schema-validator.herokuapp.com

https://www.jsonschemavalidator.net 【推荐】

2.2.2 python代码校验

实现步骤:1、导包importjsonschema2、定义 jsonschema格式 数据校验规则3、调⽤ jsonschema.validate(instance="json数据",schema="jsonshema规则")//instance:实例

查验校验结果:

  • 校验通过:返回 None

  • 校验失败

    • schema 规则错误,返回 SchemaError
    • json 数据错误,返回 ValidationError

案例:

""" 入门案例 """# 1. 导包importjsonschema# 2. 创建 校验规则schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"}},"required":["success","code","message"]}# 3. 准备 待校验数据(用 python语法,表示的 json数据)json_data={"success":True,# 布尔类型的python为True"code":100.3,"message":"操作成功"}# 4. 调用方法 进行校验res=jsonschema.validate(instance=json_data,schema=schema)# 5. 查看校验结果print("校验结果:",res)

通过结果:

校验结果: None

2.2.3 python代码校验的错误终端提示

1、SchemaError:校验规则中,有语法错误

2、ValidationError:json数据与校验规则不符,导致校验失败。

三、JSON Schema语法

JSON Schema 关键字描述
type表示待校验元素的类型
properties定义待校验的JSON对象中, 各个key-value对中value的限制条件
required定义待校验的JSON对象中, 必须存在的key
constJSON元素必须等于指定的内容
pattern使用正则表达式约束字符串类型数据

3.1 type关键字

type: 用于限定待校验JSON元素所属的数据类型。

type取值对应的python数据类型描述
objectobject对象
arraylist 列表数组
integerint整数
numberfloat或int数字
nullNone
boolean (True、False)bool布尔
stringstr字符串

3.1.1 type语法

{ "type": "数据类型" }

3.1.2 type示例

# 导包importjsonschema# 校验规则 (json语法)schema={"type":"object"}# 数据# json_data = 100# json_data = 100.2# json_data = "hello"# json_data = [1, 2, 3, 4]# json_data = None# json_data = Truejson_data={"a":1,"b":2}# 调用方法res=jsonschema.validate(instance=json_data,schema=schema)# 查看结果print("校验结果:",res)

3.2 properties关键字

**说明:**是 type关键字的辅助。用于 type 的值为 object 的场景。

**作用:**指定对象中每个字段的校验规则。 可以嵌套使用。

3.2.1 properties语法

语法: { "type": "object", "properties": { "字段名1":{规则}, "字段名2":{规则}, ...... } }

3.2.2 properties示例1

需求:

1、已知JSON数据

2、要求定义每个一级字段的数据类型

# 导包importjsonschema# 校验规则,根据测试数据写校验规则schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"},"money":{"type":"number"},"address":{"type":"null"},"data":{"type":"object"},"luckyNumber":{"type":"array"}}}# 测试数据json_data={"success":True,"code":10000,"message":"操作成功","money":6.66,"address":None,"data":{"name":"tom"},"luckyNumber":[6,8,9]}# 调用方法校验res=jsonschema.validate(instance=json_data,schema=schema)# 查看校验结果print("校验结果:",res)

3.2.3 properties示例2

需求:

1、已知JSON数据

2、要求定义JSON对象中包含的所有字段及数据类型

# 导包importjsonschema# 校验规则schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"},"money":{"type":"number"},"address":{"type":"null"},"data":{"type":"object","properties":{"name":{"type":"string"},"age":{"type":"integer"},"height":{"type":"number"}}},"luckyNumber":{"type":"array"}}}# 测试数据json_data={"success":True,"code":10000,"message":"操作成功","money":6.66,"address":None,"data":{"name":"tom","age":18,"height":1.81},"luckyNumber":[6,8,9]}# 调用方法校验res=jsonschema.validate(instance=json_data,schema=schema)# 查看校验结果print("校验结果:",res)

3.3 required关键字

**作用:**定义待校验的Json对象中,必须存在的key。

说明:

  • 用于限制JSON对象中必须包含哪些key ;
  • 该关键字的值是一个数组, 而数组中的元素必须是字符串,而且必须是唯一的

3.3.1 required语法

语法: { "required": ["字段名1", "字段名2", ...] }

3.3.2 required示例

需求:

1、已知JSON数据

2、要求JSON对象中必须包含success、 code、message等字段

# 导包importjsonschema# 待测数据json_data={"success":True,"code":10000,"message":"操作成功","money":6.66,"address":None,"data":{"name":"tom","age":"18","height":1.81},"luckyNumber":[6,8,9]}# 校验规则schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"type":"string"},"money":{"type":"number"},"address":{"type":"null"},"data":{"type":"object","required":["name","age","height"]},"luckyNumber":{"type":"array"},},"required":["success","code","message","money","address","data","luckyNumber"]}# 调用方法res=jsonschema.validate(instance=json_data,schema=schema)# 查看结果print("校验结果:",res)

3.4 const关键字

**作用:**用于校验JSON元素必须等于指定的内容 。等价于 断言中 == 用法

说明:

  • 如果待校验的JSON元素的值和该关键字指定的值相同, 则通过校验。否则, 无法通过校验
  • 该关键字的值可以是任何值, 包括null

3.4.1 const语法

语法: { "字段名":{"const": 具体值} }

3.4.1 const示例

# 导包importjsonschema# 待测试数据data={"success":True,"name":"李四","height":1.93,"addr":None}# 校验规则schema={"type":"object","properties":{"success":{"const":True},"name":{"const":"李四"},"height":{"const":1.93},"addr":{"const":None}}}# 调用方法res=jsonschema.validate(instance=data,schema=schema)# 查看结果print(res)

3.5 pattern关键字

**作用:**指定正则表达式,对字符串进行模糊匹配

正则表达式,用不常用的符号,排列组合,从大量 字符串 数据中,按指定条件 筛选 数据。

基础正则举例: 1 包含字符串:hello 2 以字符串开头 ^: ^hello 如:hello,world 3 以字符串结尾 $: hello$ 如:中国,hello 4 匹配[]内任意1个字符[]: [0-9]匹配任意⼀个数字 [a-z]匹任意一个小写字母 [cjfew9823]匹配任意一个 5 匹配指定次数{}: [0-9]{11}匹配11位数字。说明:0-9之间的任意数字要出现11次。 匹配手机号:^[0-9]{11}$ 说明:以数字开头,0-9之间的任意数字要出现11次,以数字结尾

说明:

  • 正则表达式: 字符串的匹配模式
  • 包含指定字符串: pattern = “指定字符串”

3.5.1 pattern语法

{ "字段名":{"pattern": "正则表达式"} }

3.5.2 pattern示例

需求:

1、已知JSON数据

2、校验message字段的值必须包含‘操作成功’

3、校验手机号必须是11为数字

# 导包importjsonschema# 测试数据data={"message":"操作成功!","mobile":"11800000002"}# 校验规则schema={"type":"object","properties":{"message":{"pattern":"^操作成功"},"mobile":{"pattern":"^[0-9]{11}$"}}}# 调用方法res=jsonschema.validate(instance=data,schema=schema)# 查看结果print(res)

四、JSON Schema综合案例

""" 综合案例 """importjsonschema data={"success":False,"code":10000,"message":"xxx登录成功","data":{"age":20,"name":"lily"}}schema={"type":"object","properties":{"success":{"type":"boolean"},"code":{"type":"integer"},"message":{"pattern":"登录成功$"},"data":{"type":"object","properties":{"name":{"const":"lily"},"age":{"const":20}},"required":["name","age"]}},"required":["success","code","message","data"]}# 调用方法res=jsonschema.validate(instance=data,schema=schema)# 查看结果print(res)
http://www.gsyq.cn/news/159306.html

相关文章:

  • 通达信主力控盘雷达 源码
  • 以订单为核心的全链路数字化管控能力横评:六大主流系统深度对比
  • 食品饮料行业的排产特点与要求
  • python识别图片验证码,最强验证码识别
  • 12、v-show 和 v-if 的区别
  • 2026年AI战略落地:CIO分三阶段实施框架
  • 通达信平步青云 源码
  • 2026初级药师网课排行:考生亲测好评款 - 资讯焦点
  • 金融风控模型的鲁棒性验证:软件测试从业者的实践指南
  • 【Java基础】AOP与注解
  • 离线自动标注 Occupancy:别再把“墙后面”当成空气了(附 3D Ray Casting 源码)
  • 14、Vue Mixin 源码分析与使用场景详解
  • AI论文生成器测评:6款工具实测,20分钟生成万字问卷类论文+真实参考文献,哪款最靠谱?
  • 2025最新!自考党必看10个AI论文工具测评与推荐
  • 2026年CIO做AI规划时的3个关键点
  • 智能体进化方向:Skill即场景,Skill即产品
  • 医师资格证优质机构选择干货 专业建议助你择优 - 资讯焦点
  • AI聊天高手的五招秘传:让大模型从话痨变智者
  • Comsol微小倾斜造就极致手性:连续体束缚态内秉手性的探究
  • 高效能10款项目管理系统排行榜:高效率运转的核心利器
  • 空气能行业2025年度十大品牌权威榜单总结 - 资讯焦点
  • 十大超群2025项目管理工具盘点:非凡实力提升协作效率
  • 哪个品牌的高光谱分选仪好?2026年国产和国际厂家品牌推荐 - 品牌推荐大师
  • 【无人机三维路径规划】基于A_Satr结合天牛算法BAS野外环境下考虑模态切换点优化的3D路径规划附Matlab代码和报告
  • 为什么你学了很多却依然做不好决策?
  • 2026(副)主任护师黄金复习法则:三大高效复习经验分享 - 资讯焦点
  • 医师资格证报考机构优择指南 助力高效备考拿证 - 资讯焦点
  • 移动互联网生态下定制开发开源AI智能名片S2B2C商城小程序源码在营销技术中的应用与发展
  • JavaScript性能优化实战:从入门到精通
  • ue 操作 metahuman