美文网首页
使用JSONSchema断言

使用JSONSchema断言

作者: 韩志超 | 来源:发表于2020-03-30 09:57 被阅读0次

对于复杂的JSON结构,虽然可以使用JSONPath快速提取相应的值。然而对于JSON响应的整体结构和各字段类型,使用JSONSchema验证更加方便。
安装方法:

pip install jsonschema

基本使用

以上例中的响应结果为例:

{
  "args": {
    "age": "12", 
    "name": "Kevin"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.22.0", 
    "X-Amzn-Trace-Id": "Root=1-5e7f618f-30ba932936a4a8e64ef5ea06"
  }, 
  "origin": "111.202.167.11", 
  "url": "https://httpbin.org/get?name=Kevin&age=12"
}

整个JSON结构可以描述为,整体为object类型,包含args、headers、orgin、url四个属性,其中args、headers是object类型,origin、url是字符串类型,使用JSONSchema语法描述如下:

{
    "type": "object",
    "properties": {
        "args": {"type": "object"},
        "headers": {"type": "object"},
        "origin": {"type": "string"},
        "url": {"type": "string"}
    }
}

对于object对象,还可以使用required描述必须存在的属性。对于args、headers还可以继续添加properties描述其子属性,对于字符串还可以使用patten字段描述其符合的真正表达式。
JSONSchema中的类型分为string、number、integer、array、object、boolean、null七种类型。其中,number包含整数和浮点数,integer仅限整数。JSONSchema每种类型常用的关键字如表3.3所示。

Schema中常用的关键字

最外层

  • $schema 指定使用的JSONSchema协议版本
  • title 规则标题
  • description 规则描述

通用

  • type 类型,string、number、integer、array、object、boolean、null

string

  • miniLength 最小长度
  • maxLength 最大长度
  • pattern 匹配的正则表达式

number/integer

  • minimum 最小值, 结合"exclusiveMinimum": True,不包含等于
  • maximum 最大值,结合"exclusiveMaximum": True,不包含等于
  • multipleOf 可被指定数字整除

object

  • properites 子属性
  • patternProperties 子属性名满足正则表达式
  • required 必选子属性

array

  • items 子元素
  • required 必选子元素
  • miniItems 最少子元素个数
  • maxItems 最大子元素个数

使用示例

完整示例如下:

import requests
import jsonschema
res = requests.get('https://httpbin.org/get?name=Kevin&age=12')
schema = {
    "type": "object",
    "properties": {
        "args": {
            "type": "object",
            "required": ["name", "age"],
            "properties": {
                "name": {"type": "string", "pattern": "^Kevin$"},
                "age": {"type": "string", "pattern": "^12$"}
            }
        },
        "headers": {"type": "object"},
        "origin": {"type": "string", "pattern": "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"},
        "url": {"type": "string"}
    }
} 
jsonschema.validate(res.json(), schema)

上例中,required限定,args必须有name和age两个子属性。
name字段的pattern使用“^Kevin$”表示,必须以K开头,以n结尾,即完全等于Kevin。
同样,断言通过时不会有任何输出,断言失败是则会抛出异常。

相关文章

  • 使用JSONSchema断言

    对于复杂的JSON结构,虽然可以使用JSONPath快速提取相应的值。然而对于JSON响应的整体结构和各字段类型,...

  • JsonSchema的使用

    在系统交互之间,采用Json的数据格式执行协议,来完成数据传输,算是前置校验吧 省去schema文件的编写,大致内...

  • JSON Schema入门

    JsonSchema官方文档入门文档入门文档生成Schema工具 使用Json的好处(什么是Schema): 描述...

  • Pytest官方教程-04-断言的编写和报告

    断言的编写和报告 使用assert语句进行断言 pytest允许你使用标准的Pythonassert断言语句来验证...

  • 接口自动化中的jsonSchema及契约测试

    目录 场景介绍:接口自动化及契约测试 jsonschema介绍 契约测试实现步骤及Demo jsonschema编...

  • Swift中的断言

    1. 断言 1.1 使用断言进行调试 age >= 0为false,断言被触发,终止应用。 注意:当代码使用优化编...

  • JsonSchema进行接口测试

    何为JsonSchema 了解元数据的同学很容易理解JsonSchema和Json的关系。元数据是描述数据的数据,...

  • 使用jsonschema校验json数据

    jsonschema用来标记和校验json数据,可在自动化测试中验证json的整体结构和字段类型 首先,了解一下j...

  • [接口测试_B] 03 Pytest断言处理_assert和异常

    Pytest的断言方式及应用场景 使用assert语句 断言预期的异常 断言预期的告警 利用上下文信息进行断言 自...

  • MAKE YOUR PREDICATE EXACT1

    使用准确的断言 仔细判断句子中的断言是否准确地断言了您想要断言的内容。比较这些句子,其中断言的部分是斜体: 和平已...

网友评论

      本文标题:使用JSONSchema断言

      本文链接:https://www.haomeiwen.com/subject/euymuhtx.html