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

自动化测试框架pytest---Json Schema

文章目录

    • 1. 安装
    • 2. 介绍
    • 3. 数据类型
      • integer / number
      • string
      • array
      • object

JSON Schema⼀个用来定义和校验JSON的web规范,简而言之,JSON Schema是用来校验json是否符合预期。
根据 json 创建 JSON Schema 后,你可以使用你选择的语言中的验证器将示例数据与你的模式进行
验证。

1. 安装

pip install jsonschema==4.23.0

2. 介绍

from jsonschema.validators import validatedef test_01():json = {"code": 1,"emg": "123123","data": {"id": 1,"name": "zhangsan","isAdmin": False}}json_schema = {"type": "object","required": [],"properties": {"code": {"type": "number"},"msg": {"type": "string"},"data": {"type": "object","properties": {"id": {"type": "number"},"name": {"type": "string"},"isAdmin": {"type": "boolean"}}}}}validate(instance=json, schema=json_schema) # 验证json是否符合schema

json转json schema自动工具, https://tooltt.com/json2schema/, 可能会有错误, 要自己检查

3. 数据类型

在这里插入图片描述

integer / number

type类型为integer / number 时, 可以对数值的范围进行限定, 关键字:

  • minimummaximum :指定数值的最小值和最大值。
  • exclusiveMinimumexclusiveMaximum :指定数值必须严格大于或小于某个值(不包
    含等于)。
from jsonschema.validators import validatedef test_01():json = {"code": 1,"emg": "123123","data": {"id": 1,"name": "zhangsan","isAdmin": False}}json_schema = {"type": "object","required": [],"properties": {"code": {"type": "number"},"msg": {"type": "string"},"data": {"type": "object","properties": {"id": {"type": "number","minimum": 2, # 最小值设置为2, 传参为1, 报错"maximum": 100},"name": {"type": "string"},"isAdmin": {"type": "boolean"}}}}}validate(instance=json, schema=json_schema)

在这里插入图片描述

string

type类型为string时, 可以对字符串的模式进行限定, 关键字:

  • pattern :使用正则表达式来验证字符串是否符合特定的模式。

正则表达式介绍https://www.runoob.com/regexp/regexp-syntax.html

from jsonschema.validators import validatedef test_01():json = {"code": 1,"emg": "123123","data": {"id": 1,"name": "zhangsan","isAdmin": False}}json_schema = {"type": "object","required": [],"properties": {"code": {"type": "number"},"msg": {"type": "string"},"data": {"type": "object","properties": {"id": {"type": "number",},"name": {"type": "string","pattern": r"\S+" # r表示这是一个原始字符, 不要处理成转义字符},"isAdmin": {"type": "boolean"}}}}}validate(instance=json, schema=json_schema)

在这里插入图片描述

array

type类型为array时, 可以对数组中的数据进行约束, 关键字:

  • minItemsmaxItems :指定数组的最小和最大长度。
  • uniqueItems :True表示数组中的元素是唯一的, False表示数组中的元素不用是唯一的
  • items :定义数组中每个元素的类型和约束。
from jsonschema.validators import validatedef test_01():json = {"code": 1,"emg": "123123","data": {"id": 1,"name": "zhangsan","isAdmin": False},"aaa": [1, 2, 2]}json_schema = {"type": "object","required": [],"properties": {"code": {"type": "number"},"msg": {"type": "string"},"data": {"type": "object","properties": {"id": {"type": "number",},"name": {"type": "string",},"isAdmin": {"type": "boolean"}}},"aaa":{"type": "array","items": { # 数组中的数据的类型"type": "integer"},"minItems": 1,# 数组最小的长度"uniqueItems": True # 数组中的数据要求唯一, 此时数组数据不唯一, 报错}}}validate(instance=json, schema=json_schema)

在这里插入图片描述

object

type类型为object时, 可以对对象进行约束, 关键字:

  • properties: 约束对象中的属性
  • minPropertiesmaxProperties :指定对象的最小和最大属性数量。
  • additionalProperties :控制是否允许对象中存在未在 properties 中定义的额外属性,默
    认为True, 表示允许。
  • required: JSON Schema 可以指定哪些属性是必需的。如果 JSON 实例中缺少这些必需属性,验证将失败
  • dependentRequired : 可以定义属性之间的依赖关系。例如,如果某个属性存在(前),则必须存在另一个属性(后)。
from jsonschema.validators import validatedef test_01():json = {"code": 1,"emg": "123123","data": {"id": 1,"name": "zhangsan","isAdmin": False},"aaa": [1, 2, 2]}json_schema = {"type": "object","minProperties": 1, # 属性个数最少为1"additionalProperties": False, # 不允许出现properties定义中的额外属性, 此时出现了"aaa", 报错"required": ["code", "emg"],# 必须包含"code", "emg""dependentRequired": {"data": ["code"] # data出现, 必须code也要出现},"properties": {"code": {"type": "number"},"msg": {"type": "string"},"data": {"type": "object","properties": {"id": {"type": "number",},"name": {"type": "string",},"isAdmin": {"type": "boolean"}}}}}validate(instance=json, schema=json_schema)

在这里插入图片描述


文章转载自:

http://EXlQMiYr.bhxzx.cn
http://NJEsDQe7.bhxzx.cn
http://hZzVot9U.bhxzx.cn
http://I6jukwJr.bhxzx.cn
http://UOlUgpU0.bhxzx.cn
http://dEInxocZ.bhxzx.cn
http://KoF6A9YU.bhxzx.cn
http://ZCm95SN6.bhxzx.cn
http://JDsUde13.bhxzx.cn
http://lo5U9kx7.bhxzx.cn
http://SswEQvgp.bhxzx.cn
http://p2LwJv3e.bhxzx.cn
http://Tc7qeMiR.bhxzx.cn
http://Be20Z7s1.bhxzx.cn
http://MsAheDOc.bhxzx.cn
http://GYdDGGPW.bhxzx.cn
http://9JPrmwH7.bhxzx.cn
http://SJ79DLYF.bhxzx.cn
http://A448LYfT.bhxzx.cn
http://V5zwf3Gy.bhxzx.cn
http://2pf84ue4.bhxzx.cn
http://K1DiRvVG.bhxzx.cn
http://Coy5OeBk.bhxzx.cn
http://pfyHn51G.bhxzx.cn
http://TIft3jdp.bhxzx.cn
http://pKVnsM6G.bhxzx.cn
http://KBhEDqJF.bhxzx.cn
http://d5IWHGXH.bhxzx.cn
http://ZJMk60L8.bhxzx.cn
http://NuWZErzD.bhxzx.cn
http://www.dtcms.com/a/388087.html

相关文章:

  • 阿里云PolarDB MySQL版与MCP集成方案:数据处理分析全流程的效能革命
  • Python实现霸王龙优化算法(Tyrannosaurus Optimization Algorithm, TROA)(附完整代码)
  • 弥合安全分析与故障仿真之间差距的方法
  • JavaEE---9.网络原理TCP/IP
  • @Value
  • 安装es、kibana、logstash
  • Leetcode-148.排序链表
  • 基于ETF底仓的网格交易系统实现动态参数优化与动量因子融合
  • C++底层刨析章节三: 函数对象与适配器:STL中的智能操作单元
  • MySQL多表联合查询与数据备份恢复全解析
  • 说说对React的理解?有哪些特性?
  • 深入理解 C 语言指针(二):数组与指针的深度绑定
  • 算法能力提升之树形结构-(线段树)
  • 小白实测:异地访问NAS所用的虚拟局域网使用感受及部署难度?!
  • js校验车架号VIN算法
  • MongoDB 8.0全面解析:性能提升、备份恢复与迁移指南
  • vue3如何配置不同的地址访问不同的项目
  • 苹果软件代码混淆,iOS混淆、iOS加固、ipa安全与合规取证注意事项(实战指南)
  • SQL-约束
  • [torch] 非线性拟合问题的训练
  • ubuntu设置ip流程
  • 【论文阅读】谷歌:生成式数据优化,只需请求更好的数据
  • 【深度学习】什么是过拟合,什么是欠拟合?遇到的时候该如何解决该问题?
  • CSA AICM 国际标准:安全、负责任地开发、部署、管理和使用AI技术
  • AI 赋能教育:个性化学习路径设计、教师角色转型与教育公平新机遇
  • 科技为老,服务至心——七彩喜智慧养老的温情答卷
  • ​​[硬件电路-237]:电阻、电容、电感虽均能阻碍电流流动,但它们在阻碍机制、能量转换、相位特性及频率响应方面存在显著差异
  • 内网Windows系统离线安装Git详细步骤
  • @Component 与 @Bean 核心区别
  • Rsync 详解:从入门到实战,掌握 Linux 数据同步与备份的核心工具