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

简介: JSON Schema 模式是一个词汇表,可用于注释和验证 JSON 文档。在实际工作中,对接口返回值进行断言校验,除了常用字段的断言检测以外

原文链接

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 中也可以写正则进行匹配。
image.png

点击“设置”按钮会出现各个类型返回值更详细的断言设置,这个就是 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"));

    }
}
> ⬇️ 你好呀,喜欢这篇文章的话记得点个“赞”哦!大家的支持很重要~(*^▽^*)   PS:有问题可以联系我们哦~v ceshiren001

> https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=Aliyun&timestamp=1659921581&author=QY
相关文章
|
9月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
传感器 人工智能 监控
通义灵码智能体模式在企业级开发中的应用:以云效DevOps自动化流程为例
通义灵码智能体模式具备语义理解、任务闭环与环境感知能力,结合云效DevOps实现CI/CD异常修复、测试覆盖与配置合规检查,大幅提升研发效率与质量。
533 0
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
1628 23
|
11月前
|
JSON API 数据格式
淘宝关键词搜索API接口,json数据返回
淘宝关键词搜索API接口允许开发者通过关键词检索商品,并返回符合条件的商品信息,这些信息通常以JSON格式呈现。以下是一个淘宝关键词搜索API接口返回的JSON数据示例及关键字段说明
|
数据采集 JSON 前端开发
GraphQL接口采集:自动化发现和提取隐藏数据字段
本文围绕GraphQL接口采集展开,详解如何通过`requests`+`Session`自动化提取隐藏数据字段,结合爬虫代理、Cookie与User-Agent设置实现精准抓取。内容涵盖错误示例(传统HTML解析弊端)、正确姿势(GraphQL请求构造)、原因解释(效率优势)、陷阱提示(反爬机制)及模板推荐(可复用代码)。掌握全文技巧,助你高效采集Yelp商家信息,避免常见误区,快速上手中高级爬虫开发。
332 3
GraphQL接口采集:自动化发现和提取隐藏数据字段
|
12月前
|
测试技术 API C++
Playwright 自动化测试系列(7)| 第三阶段:测试框架集成​​Page Object 模式
本课程详解Playwright测试框架中的Page Object模式,通过电商登录-下单实战演示PO架构设计与高级技巧,结合Pytest实现多用户测试。重点解析PO模式提升代码复用性、降低维护成本的核心价值,并提供常见问题解决方案,助力构建高可维护性的自动化测试体系。
|
JavaScript 搜索推荐 前端开发
通义灵码2.5智能体模式联合MCP:打造自动化菜品推荐平台,实现从需求到部署的全流程创新
本项目利用通义灵码2.5的智能体模式与MCP服务,构建在线点餐推荐网站。基于Qwen3模型,实现从需求到代码生成的全流程自动化,集成“今天吃什么”和EdgeOne MCP服务,提供个性化推荐、偏好管理等功能。技术架构采用React/Vue.js前端与Node.js后端,结合MCP工具链简化开发。项目涵盖功能测试、部署及未来扩展方向,如餐厅推荐、语音交互等,展示高效开发与灵活扩展能力。
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
2195 24
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
1250 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡