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类型主要关键字有:
properties:定义object的各个字段的属性;
required:限定必需字段。
additionalProperties:properties不能是其他字段为False,否则为True
array类型主要关键字有:
items:每个元素的类型;
minItems:最小个数;
uniqueitems:每一个元素都不一样(True,False)。
string类型主要关键字有:
maxLength定义字符串的最大长度;
minLength定义字符串的最小长度;
pattern用正则表达式约束字符串。
number类型主要关键字有:
minimum(maximum) 最小(大)值;
exclusiveMin(ax)imum 如果其值对应为true,则实例大(小)于 min(ax)imum 的值才生效。
integer类型与number类型限制类似,可以描述任意长度、任意小数点的数字。
2) 使用技巧:
若接口中参数较多,并且每一个都需要验证时,需要把每一个的校验都写上, required后将每一个必须的字段都加上;但是若需要校验的json字段在此schema中只占了部分的话,那么完全可以复用一套schema,只是在此json中不存在的字段在schema中的required后面不用加,如此,减少了再次书写schema的工作量。
总结
Jsonschema主要用于对数据的约束以及校验,描述已知的数据格式,确保用户提交的数据质量,减少部分手工校验。
Qtest是360旗下的专业测试团队!
是WEB平台部测试技术平台化、效率化的先锋力量!
陪伴是最长情的告白
每日为你推送最in的测试技术
以上是关于Jsonschema测试实践的主要内容,如果未能解决你的问题,请参考以下文章