Jsonschema测试实践

Posted Qtest之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jsonschema测试实践相关的知识,希望对你有一定的参考价值。












Jsonschema测试实践




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

Jsonschema的特性和用途:

1.  用于描述数据结构

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

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

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

3.  用于校验数据

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





项目应用


例如:在自动化测试中,校验接口的出参就用到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测试实践

Jsonschema测试实践



总结

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



Qtest是360旗下的专业测试团队!

是WEB平台部测试技术平台化、效率化的先锋力量!


陪伴是最长情的告白

每日为你推送最in的测试技术

以上是关于Jsonschema测试实践的主要内容,如果未能解决你的问题,请参考以下文章

接口测试框架实战| 搞定 Schema 断言

JsonSchema 启蒙

如何配置 VS Code 以启用 .json 文件的代码完成(jsonschema 支持)?

难以对齐 JSONschema 和 XSD 等效项

Json Schema 快速入门

逆向及Bof基础实践