专栏首页从零开始学自动化测试python接口自动化34-json校验神器jsonschema

python接口自动化34-json校验神器jsonschema

前言

前面一篇讲到json解析神器jsonpath, jsonpath是为了方便快速取值,如果我们要校验json的字段类型和格式,就不是那边方便了。 比如当接口返回一个token,这个token值不是固定的,就算取到了也不好断言,这时候我们希望断言的是token的类型是字符串,长度是固定多少位。

jsonschema

先安装 jsonschema 依赖包

pip install jsonschema

jsonschema 是基于JSON格式,用于定义 JSON 数据结构以及校验 JSON 数据内容。支持python2.7+和python3+ jsonschema 参考文档地址:https://python-jsonschema.readthedocs.io/en/latest/

>>> from jsonschema import validate>>> # A sample schema, like what we'd get from json.load()
>>> schema = {
...     "type" : "object",
...     "properties" : {
...         "price" : {"type" : "number"},
...         "name" : {"type" : "string"},
...     },
... }>>> # If no exception is raised by validate(), the instance is valid.
>>> validate(instance={"name" : "Eggs", "price" : 34.99}, schema=schema)>>> validate(
...     instance={"name" : "Eggs", "price" : "Invalid"}, schema=schema,
... )
Traceback (most recent call last):
...
ValidationError: 'Invalid' is not of type 'number'

也可以支持命令行执行

$ jsonschema -i sample.json sample.schema

完全支持 Draft 7, Draft 6, Draft 4Draft 3

使用示例

如下带有token的校验,由于token的值不固定,它是一个40位长度的16进制,0-9和a-f生成的字符串,可以用正则匹配

from jsonschema import validate
# 作者-上海悠悠 QQ交流群:717225969
# blog地址 https://www.cnblogs.com/yoyoketang/# 需要校验的内容
result = {
"code": 0,
"msg": "login success!",
"token": "000038efc7edc7438d781b0775eeaa009cb64865",
"username": "test"
}# 编写schema 内容schema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "test demo",
"description": "validate result information",
"type": "object",
"properties": {
"code": {
"description": "error code",
"type": "integer"
},
"msg": {
"description": "error msg ",
"type": "string"
},
"token":
{
"description": "login success return token",
"maxLength": 40,
"pattern": "^[a-f0-9]{40}$",  # 正则校验a-f0-9的16进制,总长度40
"type": "string"
}
},
"required": [
"code", "msg", "token"
]
}# validate校验, 跟assert断言一个意思
validate(instance=result, schema=schema)

validate 校验成功时候,不会有报错

  • JSON 数据校验失败,抛出 jsonschema.exceptions.ValidationError 异常
  • schema 模式本身有问题,抛出 jsonschema.exceptions.SchemaError 异常

schema语法

参数

描述

$schema

表示该JSON Schema文件遵循的规范

title

为该JSON Schema文件提供一个标题

description

关于该JSON Schema文件的描述信息

type

表示待校验元素的类型(例如,最外层的type表示待校验的是一个JSON对象,内层type分别表示待校验的元素类型为,整数,字符串,数字)

properties

定义待校验的JSON对象中,各个key-value对中value的限制条件

required

定义待校验的JSON对象中,必须存在的key

minimum

用于约束取值范围,表示取值范围应该大于或等于minimum

exclusiveMinimum

如果minimum和exclusiveMinimum同时存在,且exclusiveMinimum的值为true,则表示取值范围只能大于minimum

maximum

用于约束取值范围,表示取值范围应该小于或等于maximum

exclusiveMaximum

如果maximum和exclusiveMaximum同时存在,且exclusiveMaximum的值为true,则表示取值范围只能小于maximum

multipleOf

用于约束取值,表示取值必须能够被multipleOf所指定的值整除

maxLength

字符串类型数据的最大长度

minLength

字符串类型数据的最小长度

pattern

使用正则表达式约束字符串类型数据

type取值

type取值

python数据类型

object

dict

array

list

integer

int

number

float或int

null

None

boolean

bool

string

str

本文分享自微信公众号 - 从零开始学自动化测试(yoyoketang),作者:上海悠悠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • jmeter压测学习6-HTTP Cookie管理器

    web网站的请求大部分都有cookies,jmeter的HTTP Cookie管理器可以很好的管理cookies。 我用的 jmeter5.1 版本,直接加一个...

    上海-悠悠
  • 关于面试总结8-http协议相关面试题

    在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事?这个是很多面试官喜欢问的一个问题 如果测试只是停留在表面上点点...

    上海-悠悠
  • python笔记13-多线程实践篇(tomorrow)

    前言 前面几篇连续讲解了多线程的一些概念,都是一些理论的东西,有了一些理论基础了,接下来就让我们把所学的知识用到实践中吧! ? 一、 安装 1.tomorrow...

    上海-悠悠
  • Ubuntu 16.04 LTS 收到重大内核更新:共修复39处漏洞

    在为32位/64位设备和树莓派2发布Ubuntu 17.10(Artful Aardvark)系列的重大核心更新之后,Canonical今天再次为Ubuntu ...

    Debian社区
  • 移动Web性能测试笔记之二

    收集整理 @2017/12/21 Chrome浏览器Network面板http请求时间分析 Chrome浏览器开发者工具Network窗口下,可以查看下载各组件...

    企鹅号小编
  • 利用 JSON-Schema 对 Json 数据进行校验( Python 示例)

    本文尝试通过 json 数据校验方法解决如下几个问题:数据没有校验,系统处于裸奔状态,导致后期维护成本高;编写一堆校验代码,混杂在业务代码中,导致代码可读性降低...

    梅海峰
  • 看完这篇文章,就不用操心跨域问题啦,答案都在这里!

    以前工作开发中,经常会有这样的问题,前端工程师的前端页面由于跨域问题报错了,来协调后端开发人员解决,后台开发人员还那解释你来看我这边的接口是正常的,应该是你的问...

    前端达人
  • 使用spring validation完成数据后端校验

    前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户...

    kirito-moe
  • C语言编程规范

    C是一门朴素的语言,它是大部分程序员的入门语言,那么C语言的常见编程规范都有哪些呢

    闫小林
  • logstash在Elasticsearch中创建的默认索引模板问题

    在ELK架构中,使用logstash收集服务器中的日志并写入到Elasticsearch中,有时候需要对日志中的字段mapping进行特殊的设置,此时可以通过自...

    bellen

扫码关注云+社区

领取腾讯云代金券