专栏首页软测小生REST Assured Schema验证针对JSON和XML

REST Assured Schema验证针对JSON和XML

REST的另一个特性可能是你希望利用REST Assured 来验证Schema。 如果您不熟悉该过程,则实施模式验证可能会非常棘手。 本文将指导您为JSON和XML设置REST Assured 验证Schema。

不熟悉schema验证? 它基本上确保从端点返回的JSON或XML响应与一组规则匹配。 规则在schema中定义。 规则可以是一个数字在一定范围内,或者一个属性不是null等。

如果你需要更多的信息,请阅读有关JSON Schema(http://json-schema.org/),以及有关XML Schema Definition(XSD)(https://en.wikipedia.org/wiki/XML_Schema_(W3C))的更多信息。

REST Assured Schema验证设置

在我们实施任何REST Assured Schema 验证之前,我们需要确保在项目中导入对应的文件。 如果您只是在进行XML验证,那么REST Assured中已经包含了所有内容。 如果您正在进行JSON验证,则需要将REST Assured Schema Validation添加到构建文件中的依赖项:

compile 'io.rest-assured:json-schema-validator:3.0.3'

maven pom配置依赖:

<dependency>    <groupId>io.rest-assured</groupId>        <artifactId>json-schema-validator</artifactId>        <version>3.0.6</version></dependency>

XML

让我们从XML的Schema 验证开始

首先,需要为endPoint生成XML Schema定义。为此,从端点获取xml响应并将其粘贴到XSD生成器中. 这将为您生成一个XSD文件。现在我们需要将该文件放到项目的类路径中。在我的项目中,我将它放在src > main > resources文件夹中。我指定它在类路径中,因为当我构建项目时,它会出现在构建文件中,如下面的截图所示:

1、 我们可以在src> main> resources文件夹中看到Schema文件 2、 当项目构建时,我们可以看到Schema文件出现在红色构建文件夹中

现在让我们来看看XML Schema验证的测试代码:

    @Test    public void testVideoGameSchemaXml() {
       given().
               contentType("application/xml").
               header("Accept", "application/xml").
       when().
               get("http://localhost:8080/videogames/11").
       then().body(matchesXsdInClasspath("videoGameSchema.xsd"));
   }   @Test    public void testVideoGameSchemaXML() {
       given().
               pathParam("videoGameId", 5).
       when().
               get(EndPoint.SINGLE_VIDEOGAME).
       then().
           body(matchesXsdInClasspath("VideoGame.xsd"));
   }

在这段代码中,我们指定contentType和accept头用于XML,并在“http://localhost:8080/videames/11”处调用端点。然后,我们使用REST Assured方法matchesXsdInClasspath检查返回的xml是否符合我们的schema。

记得在类的顶部静态导入matchesXsdInClasspath,如下所示:

import static io.restassured.matcher.RestAssuredMatchers.matchesXsdInClasspath;

JSON

现在让我们来看下REST Assured Schema 验证 JSON。 同样,我们需要首先生成一个Schema 。复制api返回的JSON,并将其粘贴到JSON Schema 生成器中。 同样,您需要将JSON模式文件放在类路径中,如下所示:

以下代码将根据JSON Schema检查我们的response:

    @Test    public void testVideoGameSchemaJson() {
       get("http://localhost:8080/videogames/11")
               .then().assertThat().body(matchesJsonSchemaInClasspath("videoGameSchema.json"));
   }       @Test    public void testVideoGameSchemaJSON() {
       given().
               pathParam("videoGameId", 5).
       when().
               get(EndPoint.SINGLE_VIDEOGAME).
       then().
               body(matchesJsonSchemaInClasspath("VideoGameJsonSchema.json"));
   }

我们再次调用端点“http://localhost:8080/videames/11”。我们没有指定任何JSON标题,因为这是这个应用程序的默认设置。然后,我们断言JSON响应符合类路径中的JSON模式。

再次记住静态导入:

import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;

本文分享自微信公众号 - 软测小生(ruancexiaosheng),作者:软测小生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Selenium 4即将发布:每个QA都应该知道的

    熟悉Selenium 3.0发布背后故事的人知道,早2013年Selenium团队就放出消息将在圣诞节发布Selenium 3.0,可是,直到2016年Sele...

    软测小生
  • Linux文件操作命令

    (1)文件命名规则 Linux系统中的文件名称最长可以有256个字符,文件名可以由字母,数字,下划线,减号及一些特殊符号(不推荐使用)。 (...

    软测小生
  • Chrome打开网页时除了Alert/Confirm等弹窗之外还有可能是什么?

    最近一个小伙伴遇到个问题,使用Selenium在做自动化测试的时候出现弹窗,但是使用Selenium+Java处理常见的Alert/Confirm弹出框无法找到...

    软测小生
  • [C#] 常用工具类——应用程序属性信息访问类

    跟着阿笨一起玩NET
  • windows下 influxDB 操作工具 InfluxDBStudio

    可以看到,目前最新的版本是2017年发布的,到目前已有两年没有维护了,下面来下载看看使用情况。

    Devops海洋的渔夫
  • Flutter 文本行距

    Simulator Screen Shot - iPhone 11 Pro Max - 2019-09-24 at 14.42.12.png

    赵哥窟
  • CaseStudy(showcase)数据篇-Loading的制作

    做silvelight也有一段时间了,相册、游戏,刚刚完成的showcase这个小程序算是一个阶段了。这里就以showcase这个项目来做一下CaseStudy...

    用户1172164
  • entity framework不查数据库修改或排除指定字段集合通用方法

    其中DataDBEntities为数据库实体对象,代码如下: 下载地址:http://files.cnblogs.com/stone_w/EFDBHelper....

    Java中文社群_老王
  • 等保测评2.0:MySQL身份鉴别

    本篇文章主要说一下MySQL数据中身份鉴别控制点中b、c、d测评项的相关知识点和理解。

    FB客服
  • iOS开发——TDD、BDD方法以及Kiwi单元测试框架

    在GitBook上看过一篇文章,一个不写单元测试的程序员不是一个好的攻城狮。坦白的说,在Objective-C这个领域的里,我见过的会主动写单元测试的程序员还是...

    Originalee

扫码关注云+社区

领取腾讯云代金券