当前位置:网站首页>技术分享 | 接口自动化测试之JSON Schema模式该如何使用?
技术分享 | 接口自动化测试之JSON Schema模式该如何使用?
2022-08-08 14:32:00 【测试界的飘柔】
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"));
}
}
现在我邀请你进入我们的软件测试学习交流群:【746506216
】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。
喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!
软件测试工程师自学教程:
这才是2022最精细的自动化测试自学教程,我把它刷了无数遍才上岸字节跳动,做到涨薪20K【值得自学软件测试的人刷】
软件测试工程师月薪2W以上薪资必学技能 — Python接口自动化框架封装.
美团面试真题_高级测试25K岗位面试 — 软件测试人都应该看看
软件测试必会_Jmeter大厂实战 — 仅6步可实现接口自动化测试
边栏推荐
- 【小码匠自习室】[NOI Online 2020-2 入门组] 未了:可恶的精度会让你焦头烂额
- PHP —— CI 框架实现微信小程序支付
- LeetCode Daily Question 2022/8/1-2022/8/7
- RecyclerView 实现拖拽、滑动删除
- 【小码匠自习室】朋友的朋友不是朋友
- 【LeetCode】761. Special binary sequence
- [Redis] Bitmap and usage scenarios of bitmap (statistics of online people and user online status)
- 【控制】动力学建模简介 --> 牛顿-欧拉 (Newton-Euler) 法和拉格朗日 (Lagrange) 法
- Code Casual Recording Notes_Dynamic Programming_322 Change Exchange
- flink知识
猜你喜欢
我凭借这份pdf成功拿到了阿里,腾讯,京东等六家大厂offer
手把手教你设计一个全局异常处理器
星起航跨境—跨境电商进入3.0时代,卖家迎来全新机遇
shell三剑客-----sed命令
文献阅读_VistaNet:用于多模式情绪分析的视觉方面注意网络
从零开始,如何拥有自己的博客网站【华为云至简致远】
无头单向非循环链表(C语言实现)
pip install xxx 出现 AttributeError: ‘tuple’ object has no attribute ‘read’ 错误
【控制】动力学建模简介 --> 牛顿-欧拉 (Newton-Euler) 法和拉格朗日 (Lagrange) 法
bandanas Kerchief头巾是何含义?
随机推荐
兔起鹘落全端涵盖,Go lang1.18入门精炼教程,由白丁入鸿儒,全平台(Sublime 4)Go lang开发环境搭建EP00
基于接口而非实现编程
mysql 查询一个字段为特定值,并且另一个字段的值出现两次的记录?
Talking about the underlying data structure of Redis
作为一个十年卷王,告诫你们年轻人应该如何才能认清自己的价值
shell regular expression, Three Musketeers grep command
有了国产 DevOps 工具 ,还怕数字化转型成本高?
qtwebapp库的编译及简单使用
【控制】动力学建模举例 --> 拉格朗日法
JS-BOM-名字转换器-输入名字位置颠倒
Brief description of the state of the thread
Is it safe to open an account online now?Which securities to choose for securities account opening?
LeetCode简单题之统计星号
itk中生成drr整理
2022-08-07 The fifth group Gu Xiangquan study notes day31-collection-Map collection
window停掉指定端口的进程
浏览器跨域方案,适用于本地调试接口(超简单)
P8352-[SDOI/SXOI2022]小N的独立集【dp套dp】
文献阅读_VistaNet:用于多模式情绪分析的视觉方面注意网络
vijos1212 Way Selection