首页 > 其他分享 >16.整体结构响应断言

16.整体结构响应断言

时间:2024-01-17 18:25:18浏览次数:21  
标签:obj 断言 16 生成 响应 JSON JSONSchema return schema

目录

 
  • 结构断言介绍
  • JSONSchema 数据生成
  • JSONSchema 验证

响应信息数据极为庞大

 

https://ceshiren.com/t/topic/16658.json

针对于“大响应数据”如何断言

 
  • 针对主要且少量的业务字段断言。
  • 其他字段不做数据正确性断言,只做类型与整体结构的校验。
  • 与前面的版本进行 diff,对比差异化的地方。

JSONSchema 简介

 
  • 使用 JSON 格式编写的
  • 可以用来定义校验 JSON 数据的结构
  • 可以用来校验 JSON 数据的一致性
  • 可以用来校验 API 接口请求和响应

JSONSchema 整体结构响应断言

 
  1. 预先生成对应结构的 Schema。
  2. 将实际获取到的响应与生成的 Schema 进行对比。

JSONSchema 的生成

 
  • 通过界面工具生成。
  • 通过第三方库生成。
  • 通过命令行工具生成。

JSONSchema 的生成效果

 
// # 预期的 JSON 文档结构
{
  "name": "Hogwarts",
  "Courses": ["Mock", "Docker"]
}
// jsonschema
{
  "$schema": "http://json-schema.org/draft-06/schema#",
  "$ref": "#/definitions/Welcome",
  "definitions": {
    "Welcome": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "name": {
          "type": "string"
        },
        "Courses": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": ["Courses", "name"],
      "title": "Welcome"
    }
  }
}

界面工具生成

 
  • 复制 JSON 数据
  • 粘贴到在线生成工具中
  • 自动生成 JSON Schema 数据

JSON Schema 在线生成工具:https://app.quicktype.io

第三方库生成(Python)

 
  1. 安装:pip install genson
  2. 调用方法生成对应的 JSONSchema 数据结构。
from genson import SchemaBuilder
def generate_jsonschema(obj):
    # 实例化jsonschem
    builder = SchemaBuilder()
    # 传入被转换的对象 
    builder.add_object(obj)
    # 转换成 schema 数据
    return builder.to_schema()

JSONSchema 验证(Python)

 
  1. 安装:pip install jsonschema
  2. 调用 validate() 进行验证。
def schema_validate(obj, schema):
    '''
    对比 python 对象与生成的 JSONSchame 的结构是否一致
    '''
    try:
        validate(instance=obj, schema=schema)
        return True
    except Exception as e:
        return False

JSONSchema 二次封装

 
  • 生成JSONSchema
  • 验证JSONSchema
class JSONSchemaUtils:
    @classmethod
    def generate_schema(cls, obj):
        # 实例化jsonschem
        builder = SchemaBuilder()
        # 传入被转换的对象 
        builder.add_object(obj)
        # 转换成 schema 数据
        return builder.to_schema()

    @classmethod
    def schema_validate(cls, obj, schema):
        '''
        对比 python 对象与生成的 json schame 的结构是否一致
        '''
        try:
            validate(instance=obj, schema=schema)
            return True
        except Exception as e:
            return False

标签:obj,断言,16,生成,响应,JSON,JSONSchema,return,schema
From: https://www.cnblogs.com/csfsz/p/17970683

相关文章

  • 06.接口响应断言
    目录 接口断言使用场景响应结果对象响应结果断言接口断言使用场景 问题:如何确保请求可以发送成功。如何保证符合业务需求。解决方案:通过获取响应信息,验证接口请求是否成功,是否符合业务需求。Requests中的响应结果对象 importrequestsfro......
  • 07.JSON 响应体断言
    什么是JSON响应体 JSON格式的响应体指的是HTTP响应中的消息体(messagebody),它是以JSON格式编码的数据。{"name":"John","age":30,"city":"NewYork"}断言JSON格式响应体使用场景 验证API接口的返回结果是否符合预期。业务场景上是否符合预......
  • 洛谷题单指南-模拟和高精度-P1563 [NOIP2016 提高组] 玩具谜题
    原题链接:https://www.luogu.com.cn/problem/P1563题意解读:本题关键在于根据小人的朝向和寻找的方向来确定数组下标的变化。用数组存储小人,intd[]存朝向,inta[]存名称,朝向和寻找方向有4种组合:朝向(0:向内,1:向外)  寻找方向(0:左,1:右)  数组下标操作00顺时针寻找,下标递减......
  • 163邮箱登陆GPT:解锁智能交流的全新体验
    在当今数字化的社会中,电子邮件已经成为人们沟通、工作和信息传递的不可或缺的工具。其中,163邮箱作为中国最受欢迎的邮件服务提供商之一,一直以来都在为用户提供稳定、安全的电子邮件服务。近年来,随着人工智能技术的迅猛发展,有人开始思考,能否将163邮箱与GPT(GenerativePre-trainedTr......
  • 16、nginx缓存机制
    1.proxy_cache相关指令Nginx的Web缓存服务主要由proxy_cache相关指令集和fastcgi关指令集构成,前者用于反向代理时,对后端内容源服务器进行缓存,后者主要用于对FastCGI的动态程序进行缓存。1.1proxy_cache指令语法:proxy_cachezone_name;默认值:None使用环境:http......
  • 解析HTTP响应的状态码和头部信息
    HTTP响应是客户端与服务器之间通信的重要部分。它包含了服务器对客户端请求的回应,以及与该响应相关的各种信息。在HTTP响应中,有两个关键部分:状态码和头部信息。状态码状态码是HTTP响应的第一部分,它是一个三位数字的代码,用于表示请求的处理结果。状态码提供了一种标准的方法来告诉客......
  • P2216 [HAOI2007] 理想的正方形 题解
    题目链接:理想的正方形比较明显的,我们可以用二维ST表解决,具体的二维ST表的实现,只需要知道一点:对于\(st[i][j][t]=max(i\simi+2^t,j\simj+2^t)\),表示的是如图所示的大正方形范围内的最值,它可以拆成从四个小正方形的左端点走\(2^{t-1}\)长的小正方形组成,预处理完直接查......
  • Inserting a node at beginning,全局变量头指针【1月16日学习笔记】
    点击查看代码//insertinganodeatbeginning,全局变量头指针#include<iostream>usingnamespacestd;structnode{ intdata; node*next;};node*A;voidinsert(intx){ node*temp=newnode;//创建新节点 temp->data=x; temp->next=A;//新节点尾巴指......
  • Inserting a node at beginning,局部变量头指针版本1【1月16日学习笔记】
    点击查看代码//insertinganodeatbeginning,局部变量头指针版本1#include<iostream>usingnamespacestd;structnode{ intdata; node*next;};node*insert(intx,node*A){ node*temp=newnode;//创建新节点 temp->data=x; temp->next=A;//新节......
  • Inserting a node at beginning,局部变量头指针版本2【1月16日学习笔记】
    点击查看代码//insertinganodeatbeginning,局部变量头指针版本2#include<iostream>usingnamespacestd;structnode{ intdata; node*next;};voidinsert(intx,node**A){ node*temp=newnode;//创建新节点 temp->data=x; temp->next=*A;//新......