之前在Java中记录过jsonschema相关的内容,传送门:
最近由于工作的原因,语言转向了python,来整理了python中的jsonschema的使用和示例。
【jsonschema的应用场景】
一个知识点的存在,必定有其存在的意义,亦或是说使用价值,jsonschema也是一样。尤其是在json校验中,使用的非常广泛。因为是测试相关,于是整理了一下在自动化测试中的应用场景:
- 可以做详细的接口返回值校验
- 可以做粗略的接口返回值校验
- 对于返回值比较多、数据量比较大的接口,做校验的优势更大。
- 适合校验方式更灵活的场景,例如长度校验、个数校验、枚举校验、类型校验、正则校验等等。
【python下的安装】
pip3 install jsonschema 可能需要额外安装的包: openapi-schema-validator openapi-spec-validator 主要用于格式校验,应对诸如以下报错: AttributeError: module jsonschema.exceptions has no attribute validationError
【导入方式】
import jsonschema
【python下的校验示例】
def schema_check(data, schema): try: jsonschema.validate(date, schema) print("data中的数据通过自定义的json schema校验") except jsonschema.exceptions.ValidationError as e; print(e.message, "data数据没有通过schema格式校验")
【jsonschema格式的简要示例参考】
schema = { "type": "object", # 先声明每个键都是对象 "properties": { # 声明每个键对应的值的类型 "version_no": {"type": "string"}, "versions": { "type": "array", # 如果键对应的值是列表数据类型,则需要声明类型为array,然后再声明列表里面的键对应的值 "minItems": 1, "items": { "type": "object", # 字典对象 "required": ["name", "type"], # 必填字段 "properties": { # 声明键对应的值的类型约束等 "name": { "type": "string", "minLength": 1 }, "type": { "type": "string", "enum": ["python", "java"] }, "size": { "type": "number", # 整型对应的是integer }, } } }, }, "required": ["version_no", "versions"] # 最外围的键的约束 }
【校验中一些使用技巧】
- 对于较短的json串,可以采用精确校验的方式;
- 对于较长串,更适合采用粗略校验的方式;
- 在同一个串中,根据信息的重要程度,采取梯度校验的方式。
[参考链接]: