网站首页 > java教程 正文
1.JSON Schema简介
JSON Schema是一个词汇表,可用于注释和验证json文档。在实际测试工作中,对接口测试的返回值进行断言校验,除了对常用字段的断言检测以外,还要对其他字段的类型进行检测。对返回值中的字段一个个进行断言显然是非常耗时的,这个时候就需要一个模板,通过模板可以定义好数据类型和匹配条件,除了关键参数外,其一的返回值可直接通过此模板来断言,JSON Schema可以完美实现这样的需求。
2.环境准备
安装JSON Schema包
Python版本
pip install jsonschema
Java版本
<dependency>
<groupId>io.rest-assured</groupId>
<artifactId>json-schema-validator</artifactId>
<version>3.0.1</version>
</dependency>
3.JSON Schema的使用
JSON Schema模板生成
(1)我们借助与JSON Schema生成网站使用JSON Schema。打开JSON Schema生成网站,将要返回的json字符串复制到网页的左边,并把页面上的“Source type” 项选择为json。然后点击右边的“JSON Schema”项,此时会生成该json对应的JSON Schema结构,如图7-1所示。此结构中的每个字段的返回值类型都会被解析出来,同时还会将必须返回的字段标注在required列表中展示。
(2)在新的界面中点击“Copy"按钮,可以将生成的JSON Schema模板保存下来。
4.实战演示
向服务端发起一个POST请求,验证响应值中的url字段与origin字段是否都为string类型,演示代码如下(Python版和Java版)。
(1)Python演示代码
import requests
from jsonschema import validate
def test_schem():
schema = {
"type":"object",
"properties":{
"url":{
"type":"string"
},
"origin":{
"type":"string"
}
}
}
r = requests.post("https://httpbin.ceshiren.com/post")
validate(instance.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.json(), schema=schema)
返回报错信息:
> raise error
E jsonschema.exceptions.ValidationError: 'xxx.xxx.xxx.xxx' is not of type
'nember'
E Failed validating 'type' in schema['properties']['origin']:
E {'type':'number'}
同理,若将url的type改为number,也会有报错提示:
> rasie error
E jsonschema.exceptions.ValidationError:'https://httpin.ceshiren.com/post' is
not of type 'number'
E Failed validating 'type' in schema['properties']['url']:
E {'type':'number'}
(2)Java演示代码
选中上面操作中解析出来的JSON Schema格式数据,然后打开一个文本编辑器,新建一个JsonValidator.json文件,将刚刚复制出来的数据保存到这个文本文件中。文件内容如下:
{
"type":"object",
"properties":{
"url":{
"type":"string"
},
"origin":{
"type":"string"
}
}
}
以下代码校验响应值是否符合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"));
}
}
搜索微信公众号:TestingStudio霍格沃兹的干货都很硬核
猜你喜欢
- 2024-11-05 Java 进阶之异常处理(java中异常处理)
- 2024-11-05 为什么Java中的const关键字没有实现?
- 2024-11-05 Spring Boot 内置工具类(springboot 工具类调用service)
- 2024-11-05 深入理解Java:注解(Annotation)基本概念(3-1)
- 2024-11-05 Spring Boot集成validation用于优雅的校验API参数的合法性
- 2024-11-05 java初学者,如何学习java?(java该怎么学)
- 2024-11-05 Nacos网关gateway的断言,自定义断言,过滤器使用
- 2024-11-05 恕我直言,在座的各位根本不会写 Java!
- 2024-11-05 JAVA 命令之标准选项(java怎么选择)
- 2024-11-05 Java锁与线程的那些“不可描述”的事儿
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)