首页 > 其他分享 >技术分享 | 接口自动化测试之JSON Schema模式该如何使用?

技术分享 | 接口自动化测试之JSON Schema模式该如何使用?

时间:2022-08-15 11:28:03浏览次数:95  
标签:json 接口 JSON post Schema type schema

原文链接

JSON Schema 模式是一个词汇表,可用于注释和验证 JSON 文档。在实际工作中,对接口返回值进行断言校验,除了常用字段的断言检测以外,还要对其他字段的类型进行检测。对返回的字段一个个写断言显然是非常耗时的,这个时候就需要一个模板,可以定义好数据类型和匹配条件,除了关键参数外,其余可直接通过此模板来断言,JSON Schema 可以完美实现这样的需求。

JSON Schema 官网:

http://json-schema.org/implementations.html

环境准备

安装 JSON Schema 包

  • Python 版本
pip install jsonschema

  • Java 版本
<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>json-schema-validator</artifactId>
    <version>3.0.1</version>
</dependency>

JSON Schema 的使用

JSON Schema 模板生成

首先要借助于 JSON Schema tool 的网站 https://www.jsonschema.net/,将返回 json 字符串复制到页面左边,然后点击 INFER SHCEMA,就会自动转换为 schema json 文件类型,会将每个地段的返回值类型都设置一个默认类型,在 pattern 中也可以写正则进行匹配。

点击“设置”按钮会出现各个类型返回值更详细的断言设置,这个就是 schema 最常用也是最实用的功能。也可以对每种类型的字段最更细化的区间值校验或者断言,例如长度、取值范围等。

点击复制按钮,可以将生成的 schema 模板保存下来。

实战练习

接下来会发起一个 post 请求,验证响应值中的 url 字段与 origin 字段是否都为 string 类型。

Python版本

import requests
from jsonschema import validate
def test_schema():
    schema = {
          "type": "object",
          "properties": {
            "url": {
              "type": "string"
            },
            "origin": {
              "type":"string"
            }
          }
        }
    r = requests.post("https://httpbin.ceshiren.com/post")
    validate(instance=r.json(), schema=schema)

如果将 origin 的 type 写成 number ,则会出现报错:

import requests
from jsonschema import validate
def test_schema():
    schema = {
          "type": "object",
          "properties": {
            "url": {
              "type": "string"
            },
            "origin": {
              "type":"number"
            }
          }
        }
    r = requests.post("https://httpbin.ceshiren.com/post")
    validate(instance=r.json(), schema=schema)

返回报错信息

> raise error
E jsonschema.exceptions.ValidationError: 'xxx.xxx.xxx.xxx' is not of type 'number'
E Failed validating 'type' in schema['properties']['origin']:
E {'type': 'number'}

同理,若将 url 的 type 改为 number,也会有报错提示。

> raise error
E jsonschema.exceptions.ValidationError: 'https://httpbin.ceshiren.com/post' is not of type 'number'   
E Failed validating 'type' in schema['properties']['url']:
E {'type': 'number'}

Java 版本

JsonValidator.json 文件中存放校验文件,校验响应值中的 url 字段与 origin 字段是否都为 string 类型,文件内容为:

  "type": "object",
  "properties": {
    "url": {
      "type": "string"
    },
    "origin": {
      "type":"string"
    }
  }
}

同 Python 版本一致,以下代码校验响应值是否符合 JsonValidator.json 文件中规定的格式要求。

import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;
import static io.restassured.RestAssured.*;

public class Requests {
    public static void main(String[] args) {
        //定义请求头信息的contentType为application/json
        given().when().
                post("https://httpbin.ceshiren.com/post").
                then().assertThat().
                body(matchesJsonSchemaInClasspath("JsonValidator.json"));

    }
}

获取更多相关资料,请添加微信ceshiren001

标签:json,接口,JSON,post,Schema,type,schema
From: https://www.cnblogs.com/chengzi-ceba/p/16587611.html

相关文章

  • JsonConfig配置Clob
    1.情景展示  项目使用的是Oracle数据库,并且表中的某些字段类型设置成了clob类型;  当我们从数据库读取数据的时候,需要单独对clob字段进行处理,否则返回的是内存地址......
  • HCIA学习笔记十七:Trunk接口
     一、配置Trunk接口\\创建VLAN[SWA]vlan3[SWA]vlan5\\配置端口类型[SWA-Ethernet0/3]portlink-typetrunk\\配置Trunk-Link端口PVID[SWA-Ethernet0/3]port......
  • 基于requests框架实现接口自动化测试项目实战
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试requests......
  • HCIA学习笔记十六:Access接口
    一、配置Access接口属性 • Access端口收报文:如果收到对端设备发送的帧是untagged(不带VLAN标签),交换机将强制加上该端口的PVID。如果收到对端设备发送的帧是tagged(带VL......
  • Node.js + Express + Knex 开发 API 接口
    安装依赖包npmiexpressknexmysql2这是Knex官方文档地址:Knex.js-SQLquerybuilder。搭建接口config.js新建一个config.js文件,专门写knex的配置:importk......
  • 自学java第10天之接口思想
    图:1.2.3.文字解释: ......
  • SpringBoot 过滤器和拦截器---实现全局接口日志输出
    SpringBoot过滤器和拦截器---实现全局接口日志输出首先,看一张图:Tomcat收到请求之后,会先通过过滤器Filter,该过滤器属于JavaHttp框架(过滤器采用接口回调的方式来运行......
  • Django-rest-framework开发api接口
    django-rest-framework开发api接口(1)创建django项目drfdemo1并且创建一个名为app的应用django-adminstartprojectdrfdemo1pythonmanage.pystartappapp(2)安......
  • 函数式接口:Function
    Function接口Function接口在java中主要用来转换类型通过调用apply方法将T类型转换为R类型抽象方法:applyRapply(Tvar1);代码样例publicclassMain{publics......
  • 每五秒获取调取告警接口
     //告警数量 constgetAlarm=()=>{  getAlarmCount().then(   (res:any)=>{    if(res.code==200){     setCount(res......