REST Assured Schema验证针对JSON和XML

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

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

如果你需要更多的信息,请阅读有关JSON Schema,以及有关XML Schema Definition(XSD)的更多信息。

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文件夹中。我指定它在类路径中,因为当我构建项目时,它会出现在构建文件中,如下面的截图所示:
REST Assured Schema验证针对JSON和XML
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模式文件放在类路径中,如下所示:
REST Assured Schema验证针对JSON和XML

以下代码将根据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;

翻译来自:james-willett.com的博客