image.png
REST的另一个特性可能是你希望利用REST Assured 来验证Schema。 如果您不熟悉该过程,则实施模式验证可能会非常棘手。
本文将指导您为JSON和XML设置REST Assured 验证Schema。
不熟悉schema验证? 它基本上确保从端点返回的JSON或XML响应与一组规则匹配。 规则在schema中定义。 规则可以是一个数字在一定范围内,或者一个属性不是null等。
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配置依赖:
io.rest-assured
json-schema-validator
3.0.6
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,并在“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"));
}
我们再次调用端点“
再次记住静态导入:
import static io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath;