什么是 JSON Schema
JSON Schema,也称为 JSON 模式,下面一段话来自百度百科的介绍:
JSON Schema 是描述你的 JSON 数据格式;JSON 模式(应用程序/模式 + JSON)有多种用途,其中之一就是实例验证。验证过程可以是交互式或非交互式的。例如,应用程序可以使用 JSON 模式来构建用户界面使互动的内容生成除了用户输入检查或验证各种来源获取的数据。
一般使用 JSON Schema 来进行 JSON 数据格式验证,在数据提交到业务层次之前进行 JSON 格式的验证。
jsonschema 百度百科
JSON Schema 官网的描述摘要:http://json-schema.org/
- JSON Schema 是基于 JSON 格式定义 JSON 数据结构的规范
- 用于描述现有的数据格式(JSON 数据)
- 清晰的人机可读文档:定义的 JSON Schema 具有人类和机器都可读的特性
- 使用 JSON Schema 可完成完整的 JSON 结构和数据验证
- 可用于自动化测试和确保客户提交的数据质量(如下我们只讨论在自动化测试中的应用)
下面是一段 JSON 示例:
文档中包含如下信息:
- 一个老师的唯一标识符:teacherId
- 一个老师的名称:teacherName
- 老师的年龄:age
- 老师的标签:tags
{
"teacherId": 1,
"teacherName": "Happy",
"age": 18,
"tags": [ "JAVA", "Python","Automation" ]
}
例子很简单,但是中间有些问题有待解决,这也是我们在自动化测试中可能会关注的信息,比如以下这些:
- teacherId 是啥?
- teacherName 是必需的吗?
- 年龄字段 age 可以为 0 吗?
- 所有的标签都是字符串类型的值吗?
如果在自动化测试中需要来验证上述问题,方法一可以通过提取数据的方式完成,参考之前我写过的文章:
使用 JsonPath 完成接口自动化测试中参数关联和数据验证
使用 JsonPath 更适合关键信息的提取和验证,JSON Schema 更适合回答上面的这些问题。
开始写 JSON Schema
首先我们从如下一些关键字开始:
- $schema:该关键字声明该模式是根据标准的特定草案编写的,主要用于版本控制,可省略
- $id:该关键字定义模式的 URI,可省略
- title 和 description:该 JSON Schema 的注释和描述信息,不会向验证的数据调节约束
- type:该关键字会定义 JSON 数据的第一个约束,比如是 JSON 对象还是数组
针对上述 JSON 案例初步编写的 JSON Schema 如下
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.com/teacher.schema.json",
"title": "老师信息",
"description": "柠檬班的一个老师信息",
"type": "object"
}
定义属性
teacherId 属性
-
<