Jsonschema测试实践

本文介绍了Json Schema作为数据约束标准的作用,用于描述复杂数据结构,生成人机可读文档,以及进行数据校验。在自动化测试场景中,Jsonschema被用于接口出参的校验,确保数据类型的一致性。文章详细解析了Jsonschema的结构语法,如Object、array、string和number等类型的校验关键字,并提供了使用技巧,强调了其在减少手工校验工作量上的价值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Json Schema就是用来定义json数据约束的一个标准。根据这个约定模式,交换数据的双方可以理解json数据的要求和约束,也可以据此对数据进行验证,保证数据交换的正确性(通俗来讲:描述或者验证数据格式)。

Jsonschema的特性和用途:

  1. 用于描述数据结构

描述json数据时,如果数据本身的复杂度很高,高到三维四维,普通的标签函数已经无法表示这种层级结构,而Jsonschema利用object和array字段类型的反复嵌套,可以规避掉这个缺陷。

  1. 用于构建人机可读的文档

Jsonschema是自描述的,它本身就是一份很完善的说明文档,字段的说明、格式的要求等清晰明了。

  1. 用于校验数据

通过描述接口入参和出参,进行数据校验,保证两方数据一致。

项目应用

例如:在自动化测试中,校验接口的出参就用到jsonschema,用来校验得到的json字符串的数据类型是否与预期一致,如下为一个jsonschema实例:

schema = {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "description": "some information about this",
    "type": "object",
    "required": [
        "sdkcorev",  "price"
    ],
    "properties": {
        "sdkcorev": {
            "type": "string",
            "minLength": 3,
            "maxLength": 30
        },
        "price": {
            "type": "number",
            "multipleOf": 0.5, #能够被0.5整除
            # 这里没有取等,5.0<price<99999.0
            "minimum": 5.0,
            "maximum": 99999.0,
            # 若使用下面这两个关键字则 5.0<=price<=99999.0
            # "exclusiveMinimum": 5.0,
            # "exclusiveMaximum": 99999.0
        },
        "tags": {
            "type": "array",
            "items": [
                {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 8
                },
            ],
            "additonalItems": {
                "type": "string",
                "miniLength": 2
            },
            "miniItems": 1,
            "maxItems": 5,
            "uniqueItems": True
        },
        "coding": {
            "type": "string",
            "pattern": "^[A-Z]+[a-zA-Z0-9]{12}$"
        },
        "other": {
            "type": "object",
            "properties": {
                "info1": {
                    "type": "string"
                },
            }
        }
    },
    "minProperties": 3, #最小属性个数
    "maxProperties": 7, #最大属性个数
}

此实例便对接口返回的json字段进行了详细校验

1. 结构语法:

字段最好不要有’_’下划线分隔

$schema:说明是用了哪一个草案进行校验(可省略)

description:描述信息(可省略)

type:需要校验的对象是一个什么类型,主要有:Object、array、string、integer、number、boolean、enum、null

Object类型主要关键字有:

  1. properties:定义object的各个字段的属性;
  2. required:限定必需字段。
  3. additionalProperties:properties不能是其他字段为False,否则为True

array类型主要关键字有:

1. items:每个元素的类型;

2. minItems:最小个数;

3. uniqueitems:每一个元素都不一样(True,False)。

string类型主要关键字有:

1. maxLength定义字符串的最大长度;

2. minLength定义字符串的最小长度;

3. pattern用正则表达式约束字符串。

number类型主要关键字有:

1. minimum(maximum) 最小(大)值;

2. exclusiveMin(ax)imum 如果其值对应为true,则实例大(小)于 min(ax)imum 的值才生效。

integer类型与number类型限制类似,可以描述任意长度,任意小数点的数字。

2. 使用技巧:

若接口中参数较多,并且每一个都需要验证时,需要把每一个的校验都要写上, required后将每一个必须的字段都加上;但是若需要校验的json字段在此schema中只占了部分的话,那么完全可以复用一套schema,只是在此json中不存在的字段在schema中的required后面不用加,如此减少了再次书写schema的工作量。

 

总结

Jsonschema主要用于对数据的约束以及校验,描述已知的数据格式,确保用户提交的数据质量,减少部分手工校验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值