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)相关推荐

  1. XML Schema学习

    最近埋头苦读WMFC定义的接口1标准文档,其中对XML格式的定义都使用了XML Schema,由于XML Schema在很多方面都有很大的作用,大有取代DTD的趋势,所以在此写了一些学习笔记,有疏漏的 ...

  2. XML Schema全接触 (这里主要介绍W3C的Schema标准语法)

    来源:http://bbs.w3china.org/dispbbs.asp?BoardID=23&ID=27215&ReplyID=22178&skin=1 XML Schem ...

  3. XML——XML Schema

    [0]README 0.0)本文文字描述转自 core java volume 2 , 旨在理解 XML--XML Schema 的基础知识 :(本文不涉及源代码, 很遗憾,以后会补充) [1]XML ...

  4. DTD vs. XML Schema

    DTD vs. XML Schema XML Schema 指定 XML Schema 定义语言,该语言提供了描述 XML 1.0 文档结构和限制其内容的工具,其中包括那些利用 XML Namespa ...

  5. XML Schema学习札记(1)——基础总览

    内容整理自:www.w3school.com.cn 转载自:http://www.xgezhang.com/xml_schema_1.html 什么是XML Schema? XML Schema 是基 ...

  6. 缘起 Dubbo ,讲讲 Spring XML Schema 扩展机制

    背景 在 Dubbo 中,可以使用 XML 配置相关信息,也可以用来引入服务或者导出服务.配置完成,启动工程,Spring 会读取配置文件,生成注入 相关 Bean.那 Dubbo 如何实现自定义 X ...

  7. XSD(XML Schema Definition)学习笔记

    今天学习了XSD相关的知识,为了以后查找的方便,写一些笔记. 一.什么是XSD? 1.XSD全称:XML Schema Definition.XML Schema 的作用是定义 XML 文档的合法构建 ...

  8. XML、XML Schema及XSL的应用——信息组织实验报告

    一.实验目的: 1.掌握XML文档的基本语法. 2.通过本实验,使学生能够了解并掌握XML Schema的定义方法及其用途. 3.掌握使用XSL显示XML文档的基本方法. 4.熟悉XML spy201 ...

  9. 如何快速写出Json Schema,校验Json Schema

    本文首发于微信公众号: [软测小生] 得到一个Json文件,如何快速的去测试呢? 难道是一个个节点的去验证吗?那显然效率太低了. 一般推荐使用Json Schema(一种Json的数据结构定义)去校验 ...

最新文章

  1. [转]我们为什么需要工作流
  2. 解决win7系统中安装sql server 2005客户端报错问题
  3. 【MM配置】Purchasing 采购配置
  4. 上传图片方向不对 php,php-上传图片时出现错误,没有这样的路径或目录
  5. 裴蜀定理(note)
  6. Django安装与使用
  7. freemarker list size问题
  8. 关于mysql优化之个人见解
  9. java math.cos_Java Math类静态double cos(double d)示例
  10. Android图片上传和下载,android 上传/下载 图片
  11. 使用计算机自带字体怎么用_在家办公不会扫描文件怎么办?用 iPhone 自带软件就搞定啦...
  12. jQuery - 选择器(五)
  13. css3背景颜色样式,css3的关于背景的设置样式
  14. 机器学习中的数据预处理方法与步骤
  15. 【大牛分享】人机工程简史
  16. 手动修改dns服务器设置,手动设置dns地址服务器
  17. [渝粤教育] 西南科技大学 高级英语(1) 在线考试复习资料
  18. 图像识别最好的算法,图片相似度识别算法
  19. 谈谈奋斗里陆涛为什么不爱米莱
  20. 最新Symantec企业版官方专用卸载工具

热门文章

  1. UA MATH636 信息论6 微分熵
  2. Windows控制台程序处理消息编程实例二则
  3. python基础学习(五)第一次修改
  4. 【转】【WPF】WPF样式(Style)—触发器
  5. Haskell 函数式编程快速入门【草】
  6. poj 1737男人八题之一 orz ltc
  7. 在vs2005中安装boost库
  8. linux raid auto 软raid parted,linux下的raid5配置方法.doc
  9. vs2017python找不到包_关于Python在VS2017版中编译C源代码出现的各种问题解决方法...
  10. 神经网络训练集与Fock矩阵