首页 前端知识 接口测试 & Json Schema,2024年最新程序员必会知识

接口测试 & Json Schema,2024年最新程序员必会知识

2024-04-29 11:04:53 前端知识 前端哥 766 725 我要收藏

3,
“different”,
{
“types”: “of values”
}
]

2、contains关键字(draft 06)

{
“type”: “array”,
“contains”: {
“type”: “number”
}
}

以上约束,会约束数组中只需要包含至少一个符合条件的项即可。

3、additionalItems关键字

additionalItems关键字约束了数组是否允许额外的数组项。

{
“type”: “array”,
“items”: [
{
“type”: “number”
},
{
“type”: “string”
},
{
“type”: “string”,
“enum”: [
“Street”,
“Avenue”,
“Boulevard”
]
},
{
“type”: “string”,
“enum”: [
“NW”,
“NE”,
“SW”,
“SE”
]
}
],
“additionalItems”: false
}

以上约束,约束数组不允许出现第5个数据项。但符合条件的3项数组是符合定义的。

4、数组长度校验

{
“type”: “array”,
“minItems”: 2,
“maxItems”: 3
}

以上约束,约束通过minItems、maxItems可以定义数组的长度,下例定义数组长度至少为2, 不超过3。

5、唯一性校验

uniqueItems是约束数组唯一性的关键字,取值为boolean型,为true时可以约束数组对象中的每一项唯一。

{
“type”: “array”,
“uniqueItems”: true
}

E、boolean

布尔型约束通过type关键字约束,取值为true或false。

{
“type”: “boolean”
}

F、null

null型约束通过type关键字约束,取值只可为null。

{
“type”: “null”
}

四、Json Schema通用关键字

A、描述性关键字

描述性关键字在Json Schema中并不会产生实际的约束,但是对于阅读和理解Json Schema中相关约束有非常大的帮助。可以理解为Json Schema对于Json数据的说明文档。

描述性关键字主要包括:

  • title:描述对象的标题
  • Description:对数据进行说明描述
  • default:所描述对象的默认值
  • example:从draft 06支持的关键字,提供当前约束的示例

{
“title”: “Match anything”,
“description”: “This is a schema that matches anything.”,
“default”: “Default value”,
“examples”: [
“Anything”,
4035
]
}

B、枚举关键字

枚举关键字enum是个应用比较广泛的Json Schema关键字,一般用于约束数据在枚举范围内进行取值。

{
“type”: “string”,
“enum”: [
“red”,
“amber”,
“green”
]
}

C、const常量关键字

const常量关键字,用于约束数据为固定取值。

{
“const”: “United States of America”
}

D、聚合关键字

聚合关键字是Json Schema中对多个约束进行聚合处理的关键字。

1、allOf

待校验的数据对象满足allOf关键字中给出的所有约束时,才算符合要求。

{
“allOf”: [
{
“type”: “string”
},
{
“maxLength”: 5
}
]
}

2、anyOf

待校验的数据对象满足anyOf关键字中给出的任一约束时,才算符合要求。

{
“anyOf”: [
{
“type”: “string”
},
{
“type”: “number”
}
]
}

3、oneOf

oneOf关键字约束待校验的数据正好符合约束条件中的一项。

{
“oneOf”: [
{
“type”: “number”,
“multipleOf”: 5
},
{
“type”: “number”,
“multipleOf”: 3
}
]
}

4、not

not关键字约束待校验的数据不是给出的约束条件。

{
“not”: {
“type”: “string”
}
}

E、条件关键字

从draft 07开始可以支持条件关键字if、then、else可以给出一些约束的互相依赖关系。

{
“type”: “object”,
“properties”: {
“street_address”: {
“type”: “string”
},
“country”: {
“enum”: [
“United States of America”,
“Canada”
]
}
},
“if”: {
“properties”: {
“country”: {
“const”: “United States of America”
}
}
},
“then”: {
“properties”: {
“postal_code”: {
“pattern”: “[0-9]{5}(-[0-9]{4})?”
}
}
},
“else”: {
“properties”: {
“postal_code”: {
“pattern”: “[A-Z][0-9][A-Z] [0-9][A-Z][0-9]”
}
}
}
}

以上约束,约束当country是美国时,对应的区号约束条件。

F、结构性关键字

当Json数据量较大,且存在很多雷同的约束时,可以利用结构性关键字来组织多个Json Schema模式文件来组织约束。

definitions关键字可以定义可被引用的约束条件。

{
“definitions”: {
“address”: {
“type”: “object”,
“properties”: {
“street_address”: {
“type”: “string”
},
“city”: {
“type”: “string”
},
“state”: {
“type”: “string”
}
},
“required”: [
“street_address”,
“city”,
“state”
]
}
}
}

通过**$ref**关键字进行引用即可重用一些共用的约束。

{
“$ref”: “#/definitions/address”
}

$ref关键字也可以从其他模式文件中加载引用。

{
“$ref”: “definitions.json#/address”
}

$id关键字可以为一组约束指定一个唯一的id,便于结构化的引用和定义引用跟路径。

{
“$id”: “http://foo.bar/schemas/address.json”
}

五、实例

以下内容来自:http://json-schema.org/learn/getting-started-step-by-step.html

{
// schema版本(OP)
KaTeX parse error: Expected 'EOF', got '#' at position 49: …draft-07/schema#̲", // schema唯一标…id”: “http://example.com/product.schema.json”,
// schema标题(OP)
“title”: “Product”,
// schema描述(OP)
“description”: “A product from Acme’s catalog”,
// 约束检查对象的类型
“type”: “object”,
// 受约束字段描述
“properties”: {
// 约束productId类型为整型
“productId”: {
“description”: “The unique identifier for a product”,
“type”: “integer”
},
// 约束productName类型为string
“productName”: {
“description”: “Name of the product”,
“type”: “string”
},
// 约束price > 0(不包含0)
“price”: {
“description”: “The price of the product”,
“type”: “number”,
“exclusiveMinimum”: 0
},
// 约束tags为数组类型
“tags”: {
“description”: “Tags for the product”,
“type”: “array”,
// 数组内的项类型为string
“items”: {
“type”: “string”
},
// 数组至少包含1项
“minItems”: 1,
// 数组中每项不能重发
“uniqueItems”: true
},
“dimensions”: {
“type”: “object”,
// 嵌套对象约束检查规则
“properties”: {
“length”: {
“type”: “number”
},
“width”: {
“type”: “number”
},
“height”: {
“type”: “number”
}
},
// 必须包含length、width、height
“required”: [ “length”, “width”, “height” ]
}
},
// 同上
“required”: [ “productId”, “productName”, “price” ]
}

六、Json Schema在线编辑工具

定义或编写一个Json Schema约束还是一件比较工作量较大也比较复杂的工作,编写中也容易犯一些格式错误,好在工具能帮助节约大量时间。

https://www.jsonschema.net/

通过在线编辑工具,可以很方便地引入引入Json文件,并自动生成Json Schema,然后可视化地完成Json Schema的一些属性定义,极大的简化编写工作量。

七、接口校验中使用Json Schema

Postman在接口测试的脚本扩展上支持了丰富的第三方库,其中就有一个使用Json Schema来进行接口校验的常用库tv4(基于Json Schema的draft 04版本)。

A、编写MockController

@Slf4j
@RestController
public class MyController
{
@RequestMapping(value = “/testA”, produces = “application/json”)
public String testA(HttpServletRequest request)
{
String str = “”;
return str;
}

@RequestMapping(value = “/testB”, produces = “application/json”)
public String testB(HttpServletRequest request)
{
String str = “”;
return str;
}
}

1、待测试JsonA

{
“productId”: 1,
“productName”: “An ice sculpture”,
“price”: 12.5,
“tags”: [
“cold”,
“ice”
],
“dimensions”: {
“length”: 7,
“width”: 12,
“height”: 9.5
},
“warehouseLocation”: {
“latitude”: -78.75,
“longitude”: 20.4
}
}

2、待测试JsonB

{
“productId”: 1,
“productName”: “An ice sculpture”,
“price”: “12.50”,
“tags”: [
“cold”,
“ice”,
“ice”
],
“dimensions”: {
“length”: 7,
“height”: 9.5
},
“warehouseLocation”: {
“latitude”: -78.75,
“longitude”: 20.4
}
}

B、定义Json Schema及tv4校验

var schema = {
KaTeX parse error: Expected 'EOF', got '#' at position 49: …draft-07/schema#̲", "id”: “http://example.com/product.schema.json”,
“title”: “Product”,
“description”: “A product from Acme’s catalog”,
“type”: “object”,
“properties”: {
“productId”: {
“description”: “The unique identifier for a product”,
“type”: “integer”
},
“productName”: {
“description”: “Name of the product”,
“type”: “string”
},
“price”: {
“description”: “The price of the product”,
“type”: “number”,
“exclusiveMinimum”: 0
},
“tags”: {
“description”: “Tags for the product”,
“type”: “array”,
“items”: {
“type”: “string”
},
“minItems”: 1,
“uniqueItems”: true
},
“dimensions”: {
“type”: “object”,
“properties”: {
“length”: {
“type”: “number”
},
“width”: {
“type”: “number”
},
“height”: {
“type”: “number”

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数软件测试工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

24年软件测试全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-ZTbr8B2C-1712774436157)]
[外链图片转存中…(img-SB4v3KQN-1712774436157)]
[外链图片转存中…(img-4Vl0Locz-1712774436157)]
[外链图片转存中…(img-sFR5I9Y8-1712774436158)]
[外链图片转存中…(img-5cq2uRuz-1712774436158)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上软件测试开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注软件测试)
[外链图片转存中…(img-4kbhOf75-1712774436158)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6037.html
标签
评论
发布的文章

qt JSON和字符串相互转换

2024-05-05 12:05:04

nlohmann::json从入门到精通

2024-05-05 12:05:00

Android-第十节JSON讲解

2024-05-05 12:05:35

FastJson 框架详解

2024-05-05 12:05:31

MySql操作JSON

2024-05-05 12:05:31

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!