如何用Python在JSON Schema中验证特定字段的指定值
接口字段验证实现方案
一、验证title字段必须为固定值"delectus aut autem"
可以通过JSON Schema的const关键字约束字段的固定取值,同时在接口返回结果的断言中直接验证:
修改后的test_body函数(Schema验证)
from jsonschema import validate def test_body(): schema = { "type": "object", "properties": { "id": {"type": "integer"}, "title": {"type": "string", "const": "delectus aut autem"}, # 新增固定值约束 }, "required": ["id", "title"] # 可选:强制要求字段必须存在 } # 符合约束的实例验证(无报错) validate(instance={"id": 1, "title": "delectus aut autem"}, schema=schema) # 不符合约束的实例会抛出ValidationError(用于负面测试) # validate(instance={"id": 1, "title": "wrong title"}, schema=schema)
在test_get中验证接口返回的title
直接对接口返回的JSON数据做断言,或用Schema做整体验证:
import requests from jsonschema import validate ENDPOINT = "你的接口地址" def test_get(): response = requests.get(ENDPOINT) assert response.status_code == 200 data = response.json() # 方式1:直接断言title值 assert data['title'] == "delectus aut autem" # 方式2:用Schema做整体验证(推荐,可同时校验多个字段规则) schema = { "type": "object", "properties": { "id": {"type": "integer"}, "title": {"type": "string", "const": "delectus aut autem"}, }, "required": ["id", "title"] } validate(instance=data, schema=schema)
二、验证gender字段只能取"male"或"female"
使用JSON Schema的enum关键字限定字段的可选取值范围:
包含gender约束的Schema示例
from jsonschema import validate def test_gender_constraint(): schema = { "type": "object", "properties": { "id": {"type": "integer"}, "title": {"type": "string", "const": "delectus aut autem"}, "gender": {"type": "string", "enum": ["male", "female"]} # 新增枚举值约束 }, "required": ["id", "title", "gender"] # 强制要求gender字段存在 } # 合法值验证(无报错) validate(instance={"id": 1, "title": "delectus aut autem", "gender": "male"}, schema=schema) validate(instance={"id": 2, "title": "delectus aut autem", "gender": "female"}, schema=schema) # 非法值会抛出ValidationError(用于负面测试) # validate(instance={"id": 3, "title": "delectus aut autem", "gender": "other"}, schema=schema)
在接口返回验证中加入gender校验
修改test_get函数,加入gender字段的取值校验:
def test_get(): response = requests.get(ENDPOINT) assert response.status_code == 200 data = response.json() # 方式1:直接断言gender取值范围 assert data['gender'] in ["male", "female"] # 方式2:用Schema做整体验证 schema = { "type": "object", "properties": { "id": {"type": "integer"}, "title": {"type": "string", "const": "delectus aut autem"}, "gender": {"type": "string", "enum": ["male", "female"]} }, "required": ["id", "title", "gender"] } validate(instance=data, schema=schema)
内容的提问来源于stack exchange,提问作者Staulik
相关产品推荐
相关产品推荐

