自动化测试——整体结构响应断言

在这里插入图片描述


一、针对与“大响应数据”如何断言?

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

二、JSONSchema 简介

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

三、JSONSchema 整体结构响应断言

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

四、JSONSchema 的生成和验证

安装:pip install genson。
导入:from genson import SchemaBuilder

1、实例化SchemaBuilder类
builder = SchemaBuilder()
2、调用add_object方法,将要转换成jsonschema的数据传入进去
builder.add_object(obj)
3、转成schema
results = builder.to_schema()

安装:pip install jsonschema
导入:from jsonschema import validate

validate(data_object, schema=schema)

可以使用类方法,就可以实现JSONSchemaUtils.方法

import json
from genson import SchemaBuilder
from jsonschema import validate


# 可以使用类方法,就可以实现JSONSchemaUtils.方法
class JSONSchemaUtils:

    @classmethod
    def validate_scheam_by_file(cls,data_obj,schema_file):
        with open(schema_file,"r",encoding="utf-8") as f:
            schema_data=son.load(f)
            return cls.validate_schema(data_obj,schema_data)


    @classmethod
    def validate_schema(cls, data_object, schema):
        """
        通过jsonschema验证数据
        """
        # 问题:在实际工作中,不想直接抛出错误,而是返回是否成功的标志,True或者False
        try:
            validate(data_object, schema=schema)
            return True
        except Exception as e:
            print(f"结构体验证失败,失败元素是{e}")
            return False

    @classmethod
    def generate_jsonschema_by_file(cls,obj,file_path):
        json_schema_data=cls.generate_jsonschema(obj)
        with open(file_path, "w", encoding="utf-8") as f:
            json.dump(json_schema_data, f)

    @classmethod
    def generate_jsonschema(cls, obj):
        """
        生成jsonschema数据
        """
        # 1、实例化SchemaBuilder类
        builder = SchemaBuilder()
        # 2、调用add_object方法,将要转换成jsonschema的数据传入进去
        builder.add_object(obj)
        # 3、转成schema
        return builder.to_schema()

测试用例

import requests

from L3.test_jsonschema.jsonschema_utils import JSONSchemaUtils

def test_httbin_generate_schema():
    """
    针对httbin的响应信息,生成对应的schema结构文件
    :return:
    """
    r=requests.get("https://www.baidu.com/get")
    JSONSchemaUtils.generate_jsonschema_by_file(r.json(),"httpbin.json")

def test_httpbin_req():
    #1、获取响应信息
    r = requests.get("https://www.baidu.com/get")
    #2、将相应信息,传入到验证方法里面
    validate_res=JSONSchemaUtils.validate_scheam_by_file(r.json(),"httpbin.json")
    #验证结构是否一致
    assert validate_res==True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值