rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)
rest-assured从2.1.0版本开始支持 Schema 验证,包括JSON Schema validation及Xml Schema validation。我们之前断言响应体都是一个一个字段来进行断言,这样如果断言的字段比较多的话就非常的麻烦,为了解决这个问题,我们可以使用schema文件来进行响应体的断言,schema文件可以断言整个response 。
1.JSON Schema validation
例如:在classpath下面放置以下的schema文件,products-schema.json:
1 { 2 "$schema": "http://json-schema.org/draft-04/schema#", 3 "title": "Product set", 4 "type": "array", 5 "items": { 6 "title": "Product", 7 "type": "object", 8 "properties": { 9 "id": { 10 "description": "The unique identifier for a product", 11 "type": "number" 12 }, 13 "name": { 14 "type": "string" 15 }, 16 "price": { 17 "type": "number", 18 "minimum": 0, 19 "exclusiveMinimum": true 20 }, 21 "tags": { 22 "type": "array", 23 "items": { 24 "type": "string" 25 }, 26 "minItems": 1, 27 "uniqueItems": true 28 }, 29 "dimensions": { 30 "type": "object", 31 "properties": { 32 "length": {"type": "number"}, 33 "width": {"type": "number"}, 34 "height": {"type": "number"} 35 }, 36 "required": ["length", "width", "height"] 37 }, 38 "warehouseLocation": { 39 "description": "Coordinates of the warehouse with the product", 40 "$ref": "http://json-schema.org/geo" 41 } 42 }, 43 "required": ["id", "name", "price"] 44 } 45 }
我们可以通过上面的schema文件来验证 "/products" 这个请求的响应数据是否符合规范:
1 get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json"));
matchesJsonSchemaInClasspath 是从 io.restassured.module.jsv.JsonSchemaValidator 这个类中静态导入的,并且推荐静态导入这个类中的所有方法,然而为了能够使用io.restassured.module.jsv.JsonSchemaValidator 这个类必须依赖 json-schema-validator
module ,我们可以从这个网页下载它,或者是通过maven添加以下依赖来获取:
<dependency><groupId>io.rest-assured</groupId><artifactId>json-schema-validator</artifactId><version>3.0.6</version> </dependency>
1.1 JSON Schema Validation 设置
rest-assured 的 json-schema-validator module 使用的是 Francis Galiegue's json-schema-validator(fge
) 库来实现验证(Validation)。如果想要配置基础 fge 库,我们可以这样写:
1 // Given 2 JsonSchemaFactory jsonSchemaFactory = JsonSchemaFactory.newBuilder().setValidationConfiguration(ValidationConfiguration.newBuilder().setDefaultVersion(DRAFTV4).freeze()).freeze(); 3 4 // When 5 get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json").using(jsonSchemaFactory));
这个 using 方法允许我们传递一个jsonSchemaFactory 实例,rest-assured在进行验证的时候就会使用这个实例。这种配置就允许我们在验证响应结果时进行更详细的配置。
fge 库同时也允许设置validation为 checked或者unchecked,默认情况下rest-assured使用的是checked的validation,如果想要改变这个值,我们可以提供一个 JsonSchemaValidatorSettings 的实例给matcher。例如:
1 get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json").using(settings().with().checkedValidation(false)));
上面的 setting 方法是从 JsonSchemaValidatorSettings 这个类中静态导入的。
1.2 Json Schema Validation静态配置
让我们来想象一下,假如我们想一直使用unchecked的validation并且想设置Json Schema的版本为3,与其将JsonSchemaValidatorSettings 的实例一个个提供给所有的matchers,我们不如将它定义为一个静态的:
1 JsonSchemaValidator.settings = settings().with().jsonSchemaFactory( 2 JsonSchemaFactory.newBuilder().setValidationConfiguration(ValidationConfiguration.newBuilder().setDefaultVersion(DRAFTV3).freeze()).freeze()). 3 and().with().checkedValidation(false); 4 5 get("/products").then().assertThat().body(matchesJsonSchemaInClasspath("products-schema.json"));
通过上面的方式,现在任意一个导入了 JsonSchemaValidator 的matcher都会使用 DRAFTV3 作为默认的版本并且使用unchecked的validation。
为了重置 JsonSchemaValidato 为默认的配置,我们可以简单的调用一下 reset 方法来实现:
1 JsonSchemaValidato.reset();
1.3 不依赖rest-assured的JSON Schema Valition
我们不依赖rest-assured也一样可以使用 json-schema-valition ,只要我们把JSON文件表示为 String 类型,我们可以这么做:
1 import org.junit.Test; 2 import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath; 3 import static org.hamcrest.MatcherAssert.assertThat; 4 5 public class JsonSchemaValidatorWithoutRestAssuredTest { 6 7 8 @Test public void 9 validates_schema_in_classpath() { 10 // Given 11 String json = ... // Greeting response 12 13 // Then 14 assertThat(json, matchesJsonSchemaInClasspath("greeting-schema.json")); 15 } 16 }
2.Xml的 Schema 和 DTD Validation(验证)
通过使用 Xml Schema(XSD)或者DTD我们同样可以验证Xml响应体。
XSD例子:
1 get("/carRecords").then().assertThat().body(matchesXsd(xsd));
DTD例子:
1 get("/videos").then().assertThat().body(matchesDtd(dtd));
matchesXsd
方法和 matchesDtd
方法属于 Hamcrest matchers 包里,我们需要静态导入 io.restassured.matcher.RestAssuredMatchers。
转载于:https://www.cnblogs.com/lwjnicole/p/8297350.html
rest-assured之Schema validation(包括JSON Schema validation及Xml Schema validation)相关推荐
- XML Schema学习
最近埋头苦读WMFC定义的接口1标准文档,其中对XML格式的定义都使用了XML Schema,由于XML Schema在很多方面都有很大的作用,大有取代DTD的趋势,所以在此写了一些学习笔记,有疏漏的 ...
- XML Schema全接触 (这里主要介绍W3C的Schema标准语法)
来源:http://bbs.w3china.org/dispbbs.asp?BoardID=23&ID=27215&ReplyID=22178&skin=1 XML Schem ...
- XML——XML Schema
[0]README 0.0)本文文字描述转自 core java volume 2 , 旨在理解 XML--XML Schema 的基础知识 :(本文不涉及源代码, 很遗憾,以后会补充) [1]XML ...
- DTD vs. XML Schema
DTD vs. XML Schema XML Schema 指定 XML Schema 定义语言,该语言提供了描述 XML 1.0 文档结构和限制其内容的工具,其中包括那些利用 XML Namespa ...
- XML Schema学习札记(1)——基础总览
内容整理自:www.w3school.com.cn 转载自:http://www.xgezhang.com/xml_schema_1.html 什么是XML Schema? XML Schema 是基 ...
- 缘起 Dubbo ,讲讲 Spring XML Schema 扩展机制
背景 在 Dubbo 中,可以使用 XML 配置相关信息,也可以用来引入服务或者导出服务.配置完成,启动工程,Spring 会读取配置文件,生成注入 相关 Bean.那 Dubbo 如何实现自定义 X ...
- XSD(XML Schema Definition)学习笔记
今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...
- XML、XML Schema及XSL的应用——信息组织实验报告
一.实验目的: 1.掌握XML文档的基本语法. 2.通过本实验,使学生能够了解并掌握XML Schema的定义方法及其用途. 3.掌握使用XSL显示XML文档的基本方法. 4.熟悉XML spy201 ...
- 如何快速写出Json Schema,校验Json Schema
本文首发于微信公众号: [软测小生] 得到一个Json文件,如何快速的去测试呢? 难道是一个个节点的去验证吗?那显然效率太低了. 一般推荐使用Json Schema(一种Json的数据结构定义)去校验 ...
最新文章
- [转]我们为什么需要工作流
- 解决win7系统中安装sql server 2005客户端报错问题
- 【MM配置】Purchasing 采购配置
- 上传图片方向不对 php,php-上传图片时出现错误,没有这样的路径或目录
- 裴蜀定理(note)
- Django安装与使用
- freemarker list size问题
- 关于mysql优化之个人见解
- java math.cos_Java Math类静态double cos(double d)示例
- Android图片上传和下载,android 上传/下载 图片
- 使用计算机自带字体怎么用_在家办公不会扫描文件怎么办?用 iPhone 自带软件就搞定啦...
- jQuery - 选择器(五)
- css3背景颜色样式,css3的关于背景的设置样式
- 机器学习中的数据预处理方法与步骤
- 【大牛分享】人机工程简史
- 手动修改dns服务器设置,手动设置dns地址服务器
- [渝粤教育] 西南科技大学 高级英语(1) 在线考试复习资料
- 图像识别最好的算法,图片相似度识别算法
- 谈谈奋斗里陆涛为什么不爱米莱
- 最新Symantec企业版官方专用卸载工具
热门文章
- UA MATH636 信息论6 微分熵
- Windows控制台程序处理消息编程实例二则
- python基础学习(五)第一次修改
- 【转】【WPF】WPF样式(Style)—触发器
- Haskell 函数式编程快速入门【草】
- poj 1737男人八题之一 orz ltc
- 在vs2005中安装boost库
- linux raid auto 软raid parted,linux下的raid5配置方法.doc
- vs2017python找不到包_关于Python在VS2017版中编译C源代码出现的各种问题解决方法...
- 神经网络训练集与Fock矩阵